快速入门
教程
工具和语言
示例
参考
书籍评论
正则表达式参考
简介
目录
快速参考
字符
基本功能
字符类
简写
词边界
量词
Unicode
捕获组和反向引用
命名组和反向引用
特殊组
模式修饰符
递归和平衡组
替换参考
字符
匹配文本和反向引用
上下文和大小写转换
条件
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书籍评论
可打印 PDF
关于本网站
RSS 提要和博客
RegexBuddy—Better than a regular expression reference!

正则表达式参考:模式修饰符

模式修饰符语法由两个元素组成,它们在正则表达式风格之间有所不同。圆括号和问号用于将修饰符添加到正则表达式中。根据其在正则表达式中的位置和正则表达式风格,它可能会影响整个正则表达式或其一部分。如果一种风格支持至少一种修饰符语法,那么它还将支持一个或多个字母,这些字母可以在修饰符内用于切换特定模式。如果不支持,则会为该风格的所有字母指示“n/a”。

如果一种风格支持模式修饰符但不支持特定字母,则会指示为“否”。这并不意味着该风格根本没有这种模式。该风格可能仍然有这种模式,但没有关闭它的选项。默认情况下,模式也不一定关闭。例如,在大多数正则表达式风格中,^$ 默认情况下仅匹配字符串的开头和结尾。但是 Just Great Software 应用程序和 Ruby 默认情况下匹配每行的开头和结尾。在 JGsoft 应用程序中,你可以使用 (?-m) 关闭此模式,而在 Ruby 中你根本无法关闭此模式。 (?-m) 影响 Ruby 中的点而不是锚。

下表仅表示每个风格是否支持特定字母来切换特定模式。它不表示默认值。

功能语法描述示例JGsoft .NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Ruby std::regex Boost Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Oracle XML XPath
模式修饰符 (?letters) 在正则表达式的开头 正则表达式开头的模式修饰符会影响整个正则表达式,并覆盖正则表达式外部设置的任何选项。 (?i)a 匹配 aA ECMA
模式修饰符 (?letters) 在正则表达式的中间 正则表达式中间的模式修饰符会影响整个正则表达式,并覆盖正则表达式外部设置的任何选项。 te(?i)st 匹配 testteSTTEstTEST
模式修饰符 (?letters) 在正则表达式的中间 正则表达式中间的模式修饰符仅影响修饰符右侧的正则表达式部分。如果在组内使用修饰符,它仅影响该组内修饰符右侧的正则表达式部分。如果正则表达式或组使用交替,则修饰符右侧的所有交替都会受到影响。 te(?i)st 匹配 testteST,但不匹配 TEstTEST ECMA
修饰符组 (?letters:regex) 非捕获组,其修饰符仅影响组内的正则表达式部分。 te(?i:st) 匹配 testteST,但不匹配 TEstTEST 3.6ECMA
否定修饰符 (?on-off)(?on-off:regex) 连字符之前的修饰符字母(如果有)将被打开,而连字符之后的修饰符字母将被关闭。 (?i)te(?-i)st 匹配 testTEst,但不匹配 teSTTEST 不适用不适用3.6不适用ECMA不适用不适用不适用不适用不适用不适用不适用
重置修饰符 (?^) 关闭所有选项。脱字符后可以跟修饰符字母,以重新打开某些选项。 (?i)te(?^)st 匹配 testTEst 但不匹配 teSTTEST 5.1410.327.3.04.0.0不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
不区分大小写 (?i) 开启不区分大小写。 (?i)a 匹配 aA 不适用不适用不适用ECMA不适用不适用不适用不适用不适用不适用不适用
区分大小写 (?c) 开启区分大小写。 (?c)a 匹配 a 但不匹配 A 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
自由间距 (?x) 开启自由间距模式,以忽略正则表达式标记之间的空格并允许 # 注释。 (?x)a#b 匹配 a 不适用不适用不适用ECMA不适用不适用不适用不适用不适用不适用不适用
自由间距 (?xx) 开启自由间距模式,以忽略正则表达式标记之间的空格并允许 # 注释,无论是在字符类内还是外。 (?xx)[ a] 匹配 a 但不匹配   5.2610.307.3.04.0.0不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
精确间距 (?t) 开启“紧凑”或精确间距模式,将空格和 # 字符视为文本。 (?t)a#b 匹配 a#b 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
单行 (?s) 使点匹配所有字符,包括换行符。 (?s).*ab\n\ndef 中匹配 ab\n\ndef 不适用不适用不适用ECMA不适用不适用不适用不适用不适用不适用不适用
多行 (?m) 使 ^$ 在每行的开头和结尾处匹配。 (?m)^.ab\n\ndef 中匹配 ad 不适用不适用不适用ECMA不适用不适用不适用不适用不适用不适用不适用
单行 (?m) 使点匹配所有字符,包括换行符。 (?m).*ab\n\ndef 中匹配 ab\n\ndef 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
Tcl 单行 (?s) 使 ^$ 仅在字符串的开头和结尾处匹配。使点匹配所有字符,包括换行符。 (?s)^.{3} 仅在 ab\n\ndef 中匹配 ab\n 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
Tcl 多行 (?m) 使 ^$ 在每行的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 (?m)^.ab\n\ndef 中匹配 ad 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
Tcl 多行 (?n) 使 ^$ 在每行的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 (?n)^.ab\n\ndef 中匹配 ad 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
Tcl “部分”换行符敏感 (?p) 使 ^$ 仅在字符串的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 (?p)^.* 仅在 ab\n\ndef 中匹配 ab 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
Tcl “奇怪”换行符敏感 (?w) 使 ^$ 在每行的开头和结尾处匹配。使点匹配所有字符,包括换行符。 (?w)^.ab\n\ndef 中匹配 a、第一个 \nd 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
显式捕获 (?n) 普通括号是非捕获组,而不是带编号的捕获组。只有命名的捕获组才能实际捕获。 (?n)(a|b)c(?:a|b)c 相同 5.2210.307.3.04.0.0不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
重复的命名组 (?J) 允许多个命名的捕获组共享相同的名称。 (?J)(?:(?'x'a)|(?'x'b))\k'x' 匹配 aabb 6.75.2.0不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
非贪婪量词 (?U) 切换 贪婪和非贪婪量词 的语法。强烈建议不要使用它,因为它会混淆标准量词语法的含义。 (?U)a* 是惰性的,而 (?U)a*? 是贪婪的 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
UNIX 行 (?d) 当锚点与换行符匹配,并且点不匹配换行符时,使它们仅识别换行符字符作为换行符 (?dm)^.a\rb\nc 中匹配 ac 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
BRE (?b) 将正则表达式解释为 POSIX BRE (?b)a\+ 匹配 aaa 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
ERE (?e) 将正则表达式解释为 POSIX ERE (?e)[a\]+ 匹配 a\a\a 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
文字 (?q) 将正则表达式解释为一个文字字符串(不包括修饰符) (?q)[a\]+ 从字面上匹配 [a\]+ 不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
额外语法 (?X) 将用反斜杠转义且不构成正则表达式标记的字母视为错误,而不是视为文字。 (?X)\q 是一个错误,而 (?-X)\q 匹配 q 5.0.0–7.2.342.14.0–3.6.3不适用不适用不适用不适用不适用不适用不适用不适用不适用不适用
功能语法描述示例JGsoft .NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Ruby std::regex Boost Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Oracle XML XPath