模式修正符号在正则表达式界定符之外使用,比如 /groad/i 中的 i 就是修正符,它表示不区分大小写。模式修正符可以调整正则表达式的解释,扩展正则表达式在匹配,替换等操作时的某些功能。可以将多个修正符号组合使用以增强正则表达式的能力。下标是一些常用的修正符号说明:
修正符 | 功能描述
| i | 不区分大小写
| s | 模式中的圆点元字符"."将匹配所有字符,包括换行符。
| x | 模式中的空白忽略不计,除非它已经被转义
| e | 只用在 preg_replace() 函数中,在替换字符串中对你想引用做正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
| m
| 将字符串视为多行,默认的正则开始 "^" 和 结束 "$" 将目标字符串作为单一的一“行”字符(甚至其中包含有换行符也是如此)。如果在修饰符中加上 "m",那么开始和结束将会指字符串的每一行,每一行的开头就是 "^",结尾就是 "$" 。
| U
| 贪婪模式,最大限度匹配
| D
| 模式中的美元元字符仅匹配目标字符串的结尾。没有该选项的话,如果最后一个字符是换行符的话,没有符号也会匹配匹配此字符之前。如果设定了该修正符那么忽略此选项。
|
示例一:
[PHP] 纯文本查看 复制代码 <?php
$url = "Groad.Net";
preg_match("/groad. net/ix", $url, $myarray);
echo "$myarray[0]";
?>
运行输出:上面使用 i 修正符忽略了大小写以及使用 x 修正符忽略了匹配模式中的空白符,因此最后能够匹配 Gorad.Net 这个字符串。
示例二:
[PHP] 纯文本查看 复制代码 <?php
$url = "Have you read the article on information information revolution";
preg_match("/article.+?information/", $url, $myarray);
echo "$myarray[0]";
?>
运行输出:注意,上面使用的 .+? 本身是一种非贪婪形式(.+ 后面有一个问号 ?)。如果将正则中的问号去掉,即将 “.+?" 写成 ".+" ,那么它就是贪婪形式,那么会输出:article on information information 但是,使用贪婪形式时,我们可以写成:
[Plain Text] 纯文本查看 复制代码 /article.+?information/U
这样也会输出 article on information information 。这是因为,我们使用了 U 这个修正符,它正是要进行贪婪修正的,即可以将一个不贪婪的人变成一个贪得无厌的人。
(正则中贪婪和非贪婪的概念可参考:http://www.groad.net/bbs/read.php?tid=4913)
示例三:
[PHP] 纯文本查看 复制代码 <?php
$url = "This\nis\na good website";
preg_match("/^is/", $url, $myarray);
echo "$myarray[0]";
?>
上面代码输出为空。如果将匹配模式 /^is/ 改为 /^is/m ,即后面添加了修正符 m ,那么代码输出为 is 。这是因为,被测字符串中有两个换行符(\n),如果不用 m 时,那么就只认为从第一个 ^ 开始到最后的 $ 就算是一行(中间包含换行符也是如此),而用 m 之后,则 \nis 就中的 is 就会认为是新起一行的行首,因此输出为 is 。 |