如果我以错误的方式提问,请告诉我。不确定我是否从正确的角度接近它。
我的正则表达式看起来像这样。
^.+(ef?)|(mn?).+$
我试图在下面的文字中匹配第2行和第4行。
ABCD
EFGH
IJKL
MNOP
第一次
看起来,只有最后一个能够吸引编辑眼球。我错过了什么?
我已尝试按some examples进行检测,例如" ALPHA "和" BETA "但是,显然,我对它的运作方式一无所知。
答案 0 :(得分:2)
正则表达式引擎会将下面的正则表达式分成两部分。
^.+(ef?)|(mn?).+$
Part 1| Part 2
首先,第1部分将被执行。
^.+(ef?)
.+
确保在e
之前必须至少有一个字符存在,但是没有。所以它无法匹配第二个。并且对其他所有人都失败了,因为剩下的字符串中没有字符e
。
|
或
现在正则表达式引擎移动到第二部分,
(mn?).+$
匹配包含字母m
的字符串。 m
仅出现在第四个字符串中。因此,由于m
,它与.+
加上以下一个或多个字符相匹配。
匹配第2和第4个字符串的正确方法是:
^.*(ef?).*$|^.*(mn?).*$
或强>
^.*(?:(ef?)|(mn?)).*$
使用^.*(?:(ef?)|(mn?)).+$
,如果e
后面有一个字符,可选f
或m
以及可选的n
如果您希望匹配字符串以e
或m
开头,请使用以下正则表达式。
^(ef?|mn?).+$
注意:强>
.*
匹配任何字符零次或多次。.+
匹配任何字符一次或多次。