php中函数preg_match_all( ) 的作用是进行全局正则表达式匹配,在手册上看到了这个例子:
preg_match_all ("|]+>(.*)[^>]+>|U",
"example:
$out, PREG_PATTERN_ORDER);
/*
’的字符>零个或多个字符一个或多个未包含‘>’的字符>
*/
print_r ($out);
?>
上面那个正则表达式的意义已经写在程序里了。
结果是:
Array
(
[0] => Array
(
[0] => example:
[1] =>
)
[1] => Array
(
[0] => example:
[1] => this is a test
)
)
注意到了程序里面的那个U。把U去掉的结果是:
Array
(
[0] => Array
(
[0] => example:
)
[1] => Array
(
[0] => example:
)
)
很有意思,于是我以为这个U的作用是不理会前面的语句。
关于这个修饰符意义如下:
/regexp/i
不区分大小写的匹配
/regexp/s
使句点(.)匹配任何字符,包括换行符( )
/regexp/x
从模式中删除空白符和注释
/regexp/m
使^匹配换行符 ( )之后的内容,美元符号($)匹配换行符 ( )之前的内容
/regexp/e
如果替换字符串是PHP代码,使用eval()执行该代码来得到实际的替换字符串。
PHP的Perl兼容正则表达式函数也支持在Perl中不支持的其他修饰符:
修饰符
意 义
/regexp/U
颠倒子模式的贪婪性;*和+尽可能少地匹配而不是尽可能多。
/regexp/u
把模式字符串当作UTF-8编码对待
/regexp/X
如果一个反斜杠之后跟着没有特殊意义的字符,将产生一个错误
/regexp/A
把锚定位在字符串的开头就像模式中有^一样
/regexp/D
使$字符仅匹配一行的末尾
/regexp/S
使表达式解析器更加小心地检查模式的结构,使得第二次运行时(如在一个循环中)加快速度。