可以使用影响匹配行为的选项修改正则表达式模式。可以通过下列两种基本方法之一设置正则表达式选项:可以在 Regex (pattern, options) 构造函数中的 options 参数中指定,其中 options 是 RegexOptions 枚举值的按位“或”组合;也可以使用内联 (?imnsx-imnsx:) 分组构造或 (?imnsx-imnsx) 其他构造在正则表达式模式内设置它们。

在内联选项构造中,一个选项或一组选项前面的减号 (-) 用于关闭这些选项。例如,内联构造 (?ix-ms) 将打开 IgnoreCase 和 IgnorePatternWhiteSpace 选项而关闭 Multiline 和 Singleline 选项。默认情况下,关闭所有正则表达式选项。

下表列出了 RegexOptions 枚举的成员以及等效的内联选项字符。请注意,选项 RightToLeft 和 Compiled 只适用于表达式整体而不允许内联。(它们只能在 Regex 构造函数的 options 参数中指定。)选项 None 和 ECMAScript 不允许内联。

RegexOption 成员 内联字符 说明

None

N/A

指定不设置任何选项。

IgnoreCase

i

指定不区分大小写的匹配。

Multiline

m

指定多行模式。更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。

ExplicitCapture

n

指定唯一有效的捕获是显式命名或编号的 (?<name>…) 形式的组。这允许圆括号充当非捕获组,从而避免了由 (?:…) 导致的语法上的笨拙。

Compiled

N/A

指定正则表达式将被编译为程序集。生成该正则表达式的 Microsoft 中间语言 (MSIL) 代码;以较长的启动时间为代价,得到更快的执行速度。

Singleline

s

指定单行模式。更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。

IgnorePatternWhitespace

x

指定从模式中排除非转义空白并启用数字符号 (#) 后面的注释。(有关转义空白字符的列表,请参见字符转义。)请注意,空白永远不会从字符类中消除。

RightToLeft

N/A

指定搜索是从右向左而不是从左向右进行的。具有此选项的正则表达式将移动到起始位置的左边而不是右边。(因此,起始位置应指定为字符串的结尾而不是开头。)为了避免构造具有无限循环的正则表达式的可能性,此选项不能在中流指定。但是,(?<) 回顾后发构造提供了可用作子表达式的类似替代物。

RightToLeft 只更改搜索方向。它不会反转所搜索的子字符串。预测先行回顾后发断言不改变:预测先行向右搜索;回顾后发向左搜索。

ECMAScript

N/A

指定已为表达式启用了符合 ECMAScript 的行为。此选项仅可与 IgnoreCase 和 Multiline 标志一起使用。将 ECMAScript 同任何其他标志一起使用将导致异常。

CultureInvariant

N/A

指定忽略语言中的区域性差异。有关更多信息,请参见

 
下面是一个使用正则表达式读取数据库脚本的例子,其中使用 /is 匹配多行,。
 RunDbScript
{
    private $connection;
    
private $sqlScript;
    
private $_config;
    
private $tablePrefix;
    
    
function __construct($config)
    {
        
$this->_config = $config;
        
$this->sqlScript = file_get_contents("mx.sql");
        
$this->tablePrefix = $config["tablePrefix"];
    }
    
function connect()
    {
       
$this->connection=@mysql_connect($this->_config["host"],$this->_config["user"],$this->_config["pwd"]) or trigger_error('SQL: '.mysql_error($this->connection), E_USER_ERROR);
       
mysql_select_db($this->_config["database"],$this->connection)or trigger_error('SQL: '.mysql_error($this->connection), E_USER_ERROR);
       
mysql_query("SET NAMES 'gb2312'");
    }
    
function query($sql)
    {
        
$result=@mysql_query($sql,$this->connection) or $error=mysql_error($this->connection);
        
if(!empty($error)) echo $error;
        
return $result;                
    }
    
function format()
    {
        
$match = preg_match('/db\sscript\sstart-*(.*)--\s-*db\sscript\send/is',$this->sqlScript,$matches);
        
$this->sqlScript = $matches[1]; 
        
$this->sqlScript = str_replace("{#prefix}",$this->tablePrefix,$this->sqlScript);
        
$this->sqlScript = preg_replace('/\n+/', '', $this->sqlScript);
    }
    
function disconnect()
    {
        @
mysql_close($this->connection);
    }
    
function run()
    {
        
$this->format();
        
$sqlArray = explode(";",$this->sqlScript);
        
$this->connect();
        
foreach ($sqlArray as $sql)
        {
            
$sql = trim($sql);
            
echo $sql."<br/><br/>";
            
if(!empty($sql)) $this->query($sql);
        }
        
$this->disconnect();
    }
}

$config= array("host"=>"localhost","user"=>"root","pwd"=>"321654","database"=>"mx_v0808","tablePrefix"=>"mx_");
$dbscript = new RunDbScript($config);
$dbscript->run();
?>

相关文章:

  • 2021-08-22
  • 2021-07-14
  • 2022-12-23
  • 2022-12-23
  • 2021-10-23
  • 2021-10-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-18
  • 2021-07-23
  • 2021-08-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案