正则表达式参考 |
简介 |
目录 |
快速参考 |
字符 |
基本功能 |
字符类 |
简写 |
锚 |
词边界 |
量词 |
Unicode |
捕获组和反向引用 |
命名组和反向引用 |
特殊组 |
模式修饰符 |
递归和平衡组 |
替换参考 |
字符 |
匹配文本和反向引用 |
上下文和大小写转换 |
条件 |
本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书籍评论 |
可打印 PDF |
关于本网站 |
RSS 提要和博客 |
模式修饰符语法由两个元素组成,它们在正则表达式风格之间有所不同。圆括号和问号用于将修饰符添加到正则表达式中。根据其在正则表达式中的位置和正则表达式风格,它可能会影响整个正则表达式或其一部分。如果一种风格支持至少一种修饰符语法,那么它还将支持一个或多个字母,这些字母可以在修饰符内用于切换特定模式。如果不支持,则会为该风格的所有字母指示“n/a”。
如果一种风格支持模式修饰符但不支持特定字母,则会指示为“否”。这并不意味着该风格根本没有这种模式。该风格可能仍然有这种模式,但没有关闭它的选项。默认情况下,模式也不一定关闭。例如,在大多数正则表达式风格中,^ 和 $ 默认情况下仅匹配字符串的开头和结尾。但是 Just Great Software 应用程序和 Ruby 默认情况下匹配每行的开头和结尾。在 JGsoft 应用程序中,你可以使用 关闭此模式,而在 Ruby 中你根本无法关闭此模式。 影响 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) 在正则表达式的开头 | 正则表达式开头的模式修饰符会影响整个正则表达式,并覆盖正则表达式外部设置的任何选项。 | a 匹配 a 和 A。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 是 | 是 | 是 | 否 | ECMA | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
模式修饰符 | (?letters) 在正则表达式的中间 | 正则表达式中间的模式修饰符会影响整个正则表达式,并覆盖正则表达式外部设置的任何选项。 | test 匹配 test、teST、TEst 和 TEST。 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
模式修饰符 | (?letters) 在正则表达式的中间 | 正则表达式中间的模式修饰符仅影响修饰符右侧的正则表达式部分。如果在组内使用修饰符,它仅影响该组内修饰符右侧的正则表达式部分。如果正则表达式或组使用交替,则修饰符右侧的所有交替都会受到影响。 | test 匹配 test 和 teST,但不匹配 TEst 或 TEST。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 否 | 是 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
修饰符组 | (?letters:regex) | 非捕获组,其修饰符仅影响组内的正则表达式部分。 | te(?i:st) 匹配 test 和 teST,但不匹配 TEst 或 TEST。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 3.6 | 是 | 否 | ECMA | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
否定修饰符 | (?on-off) 和 (?on-off:regex) | 连字符之前的修饰符字母(如果有)将被打开,而连字符之后的修饰符字母将被关闭。 | test 匹配 test 和 TEst,但不匹配 teST 或 TEST。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 否 | 3.6 | 是 | 不适用 | ECMA | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
重置修饰符 | (?^) | 关闭所有选项。脱字符后可以跟修饰符字母,以重新打开某些选项。 | test 匹配 test 和 TEst 但不匹配 teST 或 TEST。 | 否 | 否 | 否 | 5.14 | 否 | 10.32 | 7.3.0 | 否 | 4.0.0 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
不区分大小写 | (?i) | 开启不区分大小写。 | a 匹配 a 和 A。 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 是 | 是 | 是 | 不适用 | ECMA | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
区分大小写 | (?c) | 开启区分大小写。 | a 匹配 a 但不匹配 A。 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
自由间距 | (?x) | 开启自由间距模式,以忽略正则表达式标记之间的空格并允许 # 注释。 | a#b 匹配 a | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 是 | 是 | 是 | 不适用 | ECMA | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
自由间距 | (?xx) | 开启自由间距模式,以忽略正则表达式标记之间的空格并允许 # 注释,无论是在字符类内还是外。 | [ a] 匹配 a 但不匹配 | 否 | 否 | 否 | 5.26 | 否 | 10.30 | 7.3.0 | 否 | 4.0.0 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
精确间距 | (?t) | 开启“紧凑”或精确间距模式,将空格和 # 字符视为文本。 | a#b 匹配 a#b | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
单行 | (?s) | 使点匹配所有字符,包括换行符。 | .* 在 ab\n\ndef 中匹配 ab\n\ndef | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 是 | 是 | 否 | 不适用 | ECMA | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
多行 | (?m) | 使 ^ 和 $ 在每行的开头和结尾处匹配。 | ^. 在 ab\n\ndef 中匹配 a 和 d | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 是 | 是 | 否 | 不适用 | ECMA | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
单行 | (?m) | 使点匹配所有字符,包括换行符。 | .* 在 ab\n\ndef 中匹配 ab\n\ndef | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 是 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
Tcl 单行 | (?s) | 使 ^ 和 $ 仅在字符串的开头和结尾处匹配。使点匹配所有字符,包括换行符。 | ^.{3} 仅在 ab\n\ndef 中匹配 ab\n | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
Tcl 多行 | (?m) | 使 ^ 和 $ 在每行的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 | ^. 在 ab\n\ndef 中匹配 a 和 d | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
Tcl 多行 | (?n) | 使 ^ 和 $ 在每行的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 | ^. 在 ab\n\ndef 中匹配 a 和 d | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
Tcl “部分”换行符敏感 | (?p) | 使 ^ 和 $ 仅在字符串的开头和结尾处匹配。不允许点和取反字符类匹配换行符。 | ^.* 仅在 ab\n\ndef 中匹配 ab | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
Tcl “奇怪”换行符敏感 | (?w) | 使 ^ 和 $ 在每行的开头和结尾处匹配。使点匹配所有字符,包括换行符。 | ^. 在 ab\n\ndef 中匹配 a、第一个 \n 和 d | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
显式捕获 | (?n) | 普通括号是非捕获组,而不是带编号的捕获组。只有命名的捕获组才能实际捕获。 | (a|b)c 与 (?:a|b)c 相同 | 是 | 是 | 否 | 5.22 | 否 | 10.30 | 7.3.0 | 否 | 4.0.0 | 不适用 | 不适用 | 是 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
重复的命名组 | (?J) | 允许多个命名的捕获组共享相同的名称。 | (?:(?'x'a)|(?'x'b))\k'x' 匹配 aa 或 bb | 否 | 否 | 否 | 否 | 6.7 | 是 | 5.2.0 | 是 | 是 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
非贪婪量词 | (?U) | 切换 贪婪和非贪婪量词 的语法。强烈建议不要使用它,因为它会混淆标准量词语法的含义。 | a* 是惰性的,而 a*? 是贪婪的 | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 是 | 是 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
UNIX 行 | (?d) | 当锚点与换行符匹配,并且点不匹配换行符时,使它们仅识别换行符字符作为换行符 | ^. 在 a\rb\nc 中匹配 a 和 c | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
BRE | (?b) | 将正则表达式解释为 POSIX BRE | a\+ 匹配 aaa | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
ERE | (?e) | 将正则表达式解释为 POSIX ERE | [a\]+ 匹配 a\a\a | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
文字 | (?q) | 将正则表达式解释为一个文字字符串(不包括修饰符) | [a\]+ 从字面上匹配 [a\]+ | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 不适用 | 不适用 | 否 | 否 | 否 | 不适用 | 否 | 是 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
额外语法 | (?X) | 将用反斜杠转义且不构成正则表达式标记的字母视为错误,而不是视为文字。 | \q 是一个错误,而 \q 匹配 q | 否 | 否 | 否 | 否 | 是 | 否 | 5.0.0–7.2.34 | 是 | 2.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 |