模式修正符号在正则表达式定界符之外使用(最后一个斜线“/”之后),例如“php/i”。其中“/php/”是一个正则表达式的模式,而“i”就是修正此模式所使用的修正符号,用来匹配时不区分大小写。模式修正符可以调整正则表达式的解释,扩展了正则表达式在匹配、替换等操作时的某些功能,而且模式修正符号也可以组合使用,更增强了正则表达式的处理能力。例如“/php/Uis”则是使用“U”、“i”和“s”三个模式修正符组合在一起使用。模式修正符对编写简洁而简小的表达式大有帮助,在下面的表格中,列出了一些常用的模式修正符及其功能说明,如下表所示。
下面是几个简单的示例,用以说明表中模式修正符中的使用。在使用模式修正符时,其中的空格和换行被忽略,如果使用其他非模式修正字符会导致错误。如下所示:
模式“/Web Server/ix”可以用来匹配字符串“webServer”,忽略大小写和空白。
模式“/a.*e/”去匹配字符串“abcdefgabcdefgabcdefg”,由于模式中的“.*”按贪婪匹配,会从这个字符串中匹配出“abcdefgabcdefgabcde”。从第一个“a”字母开始到最后一个“e”字母结束,都属于“.*”的内容,所以不是“abcde”。如果想取消这种贪婪匹配,想从第一个字母“a”只匹配到第一个字母“e”就结束,匹配出字符串“abcde”,可以使用模式修正符号“U”或在模式中使用“.*”后面跟上“?”,例如使用模式“/a.*e/U”或“/a.*?e/”。相反,如果两个一起使用又启用了贪婪匹配,例如模式“/a.*?e/U”则匹配字符串“abcdefgabcdefgabcdefg”中的“abcdefgabcdefgabcde”,而不是“abcde”。建议在模式中使用“.*”后面跟上“?”代替模式修正符号“U”,因为在其他一些编程语言中,如果也是采用Perl兼容的正则函数,可能没有模式修正符号“U”,例如JavaScript中就不存在这个模式修正符号。
模式“/^is/m”可以匹配字符串“this
is
a
tes”中的is,因为使用模式修正符“m”将字符串视为了多行,第二行的开头出现了“is”则匹配成功。默认的正则开始“^”和结束“$”将目标字符串作为单一的一“行”(甚至其中包含有换行符也是如此)。