无法识别这两个关键字

时间:2014-11-03 12:25:13

标签: c# regex

如果我以错误的方式提问,请告诉我。不确定我是否从正确的角度接近它。

我的正则表达式看起来像这样。

^.+(ef?)|(mn?).+$

我试图在下面的文字中匹配第2行和第4行。

  

ABCD
  EFGH
  IJKL
  MNOP
  第一次

看起来,只有最后一个能够吸引编辑眼球。我错过了什么?

我已尝试按some examples进行检测,例如" ALPHA "和" BETA "但是,显然,我对它的运作方式一无所知。

1 个答案:

答案 0 :(得分:2)

正则表达式引擎会将下面的正则表达式分成两部分。

^.+(ef?)|(mn?).+$

  Part 1| Part 2

首先,第1部分将被执行。

^.+(ef?)

.+确保在e之前必须至少有一个字符存在,但是没有。所以它无法匹配第二个。并且对其他所有人都失败了,因为剩下的字符串中没有字符e

|

现在正则表达式引擎移动到第二部分,

(mn?).+$

匹配包含字母m的字符串。 m仅出现在第四个字符串中。因此,由于m,它与.+加上以下一个或多个字符相匹配。

匹配第2和第4个字符串的正确方法是:

^.*(ef?).*$|^.*(mn?).*$

^.*(?:(ef?)|(mn?)).*$    

DEMO

使用^.*(?:(ef?)|(mn?)).+$,如果e后面有一个字符,可选fm以及可选的n

如果您希望匹配字符串以em开头,请使用以下正则表达式。

^(ef?|mn?).+$

注意:

  • .*匹配任何字符零次或多次。
  • .+匹配任何字符一次或多次。