" OR" RegEx语法中的运算符

时间:2014-01-20 09:35:00

标签: php regex

好的,我已经和RegEx 合作了很多次,但这是我老老实实无法理解的事情之一。而且看起来我错过了一些相当简单的东西......

所以,假设我们要匹配“AB”或“AC”。换句话说,“A”后跟“B”或“C”。 这可以表示为A[BC] A[B|C] A(B|C)等等。

现在,如果A,B,C不只是单个字母而是子表达式呢?


请在这里看一下这个例子(好吧,我承认它看起来不那么简单!哈哈):http://regexr.com?382a4

我正在尝试匹配capital =(及其变体),然后是:

  • 模式1
  • 模式2

为什么使用|运算符仅适用于后一部分(我的正则表达式也匹配“模式2”而前面有capital =)。请注意,我也试过使用正面的环顾,但没有任何成功。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您的原始正则表达式可归纳为:

capital = (ABC)|(DEF)

匹配capital = ABC DEF。添加一对()正确包装|子句。

Demo here

答案 1 :(得分:1)

我想这个正则表达式:

capital = (ABC|XYZ)

应该有用(如果我能正确理解你的请求......)

答案 2 :(得分:0)

实际上[B|C]不正确,(B|C)是正确的。

字符类

在RegEx中,术语[]被称为字符类,它用于根据括号中列出的选项表示一个(单个)字符。

在您的情况下,[B|C]B|C匹配。我们可以使用[BC]匹配BC来更正此问题。这恰好与BC中的一个字符匹配。

捕获小组

在RegEx术语中,()被称为捕获组。它用于在相邻组之间创建边界,它匹配的任何内容都将出现在preg_match的输出数组中或作为preg_replace中的变量。

在该组中,您可以使用|运算符来指定您希望匹配之前的任何内容或运算符之后的任何内容。

这可用于匹配具有多个字符的字符串,例如(Ana|Maria)或各种结构,例如([a-zA-Z]+|[0-9]+)

您还可以使用|等捕获组之外的(group-1)|(group-2),也可以使用((group-1)|(group-2))等子组。