快速入门
教程
工具和语言
示例
参考
书评
正则表达式教程
简介
目录
特殊字符
不可打印字符
正则表达式引擎内部
字符类
字符类减法
字符类交集
简写字符类
单词边界
交替
可选项
重复
分组和捕获
反向引用
反向引用,第 2 部分
命名组
相对反向引用
分支重置组
自由间距和注释
Unicode
模式修饰符
原子分组
占有量词
前瞻和后顾
环视,第 2 部分
将文本排除在匹配之外
条件
平衡组
递归
子例程
无限递归
递归和量词
递归和捕获
递归和反向引用
递归和回溯
POSIX 方括号表达式
零长度匹配
继续匹配
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于本网站
RSS 提要和博客
RegexBuddy—Better than a regular expression tutorial!

在正则表达式中指定模式

通常,匹配模式是在正则表达式外部指定的。在编程语言中,你可以将它们作为标志传递给正则表达式构造函数或附加到正则表达式文字。在应用程序中,你可以切换相应的按钮或复选框。你可以在本网站的工具和语言部分找到具体内容。

有时,工具或语言不提供指定匹配选项的功能。在Java中方便的String.matches()方法不接受匹配选项的参数,就像Pattern.compile()那样。或者,正则表达式风格可能支持不作为外部标志公开的匹配模式。在R中的正则表达式函数只有ignore.case作为其唯一选项,即使底层的 PCRE 库具有比本教程中讨论的任何其他库更多的匹配模式。

在这些情况下,你可以将以下模式修饰符添加到正则表达式的开头。要指定多个模式,只需将它们放在一起,如(?ismx)

仅对正则表达式的部分内容启用和禁用模式

现代正则表达式风格允许你仅对正则表达式的部分内容应用修饰符。如果你在正则表达式的中间插入修饰符 (?ism),则该修饰符仅应用于修饰符右侧的正则表达式部分。使用这些风格,你可以通过在它们前面加上减号来禁用模式。减号后面的所有模式都将被禁用。例如,(?i-sm) 启用不区分大小写,并禁用单行模式和多行模式。

如果一个风格不能仅对正则表达式的部分应用修饰符,那么它会将正则表达式中间的修饰符视为错误。Python是此规则的例外。在 Python 中,将修饰符放在正则表达式的中间会影响整个正则表达式。因此,在 Python 中,(?i)不区分大小写不区分大小写(?i) 都不区分大小写。在所有其他风格中,尾随模式修饰符要么没有效果,要么是错误。

你可以快速测试你正在使用的正则表达式风格如何处理模式修饰符。正则表达式 (?i)te(?-i)st 应该匹配 testTEst,但不匹配 teSTTEST

修饰符跨度

你不必使用两个修饰符,一个用于打开选项,另一个用于关闭选项,而是使用修饰符跨度。(?i)不区分大小写(?-i)区分大小写(?i)不区分大小写 等同于 (?i)不区分大小写(?-i:区分大小写)不区分大小写。此语法类似于 非捕获组 (?:)。你可以将非捕获组视为不更改任何修饰符的修饰符跨度。但是,有一些风格,例如 JavaScriptPythonTcl,它们支持非捕获组,即使它们不支持修饰符跨度。与非捕获组一样,修饰符跨度不会创建 反向引用

修饰符跨度受允许你在正则表达式的中间使用模式修饰符的所有正则表达式风格以及仅受这些风格支持。其中包括 JGsoft 引擎.NETJavaPerlPCREPHPDelphiR