如果我以错误的方式提问,请告诉我。不知道我是否从正确的角度接近它。无法识别两个关键字
我的正则表达式看起来像这样。
^.+(ef?)|(mn?).+$
我想在下面的文本匹配线2和4。
ABCD
EFGH
IJKL
MNOP
QRST
因为它似乎,只有最后一个惹人眼球的编辑。我错过了什么?
我试图按照some examples来检测例如“ALPHA”和“BETA”的字眼,但显然,我对它的工作方式太无知。
如果我以错误的方式提问,请告诉我。不知道我是否从正确的角度接近它。无法识别两个关键字
我的正则表达式看起来像这样。
^.+(ef?)|(mn?).+$
我想在下面的文本匹配线2和4。
ABCD
EFGH
IJKL
MNOP
QRST
因为它似乎,只有最后一个惹人眼球的编辑。我错过了什么?
我试图按照some examples来检测例如“ALPHA”和“BETA”的字眼,但显然,我对它的工作方式太无知。
正则表达式引擎会将下面的正则表达式分成两部分。
^.+(ef?)|(mn?).+$
Part 1| Part 2
首先,part1将被执行。
^.+(ef?)
.+
确保必须有e
之前ATLEAST单个字符存在,但不存在。所以它不符合第二个。并且因为其余字符串中不存在字符e
而失败。
|
OR
现在正则表达式引擎移动到第二部分,
(mn?).+$
匹配包含字母m
的字符串。 m
只存在于第四个字符串中。所以它匹配m
加上以下一个或多个字符,因为.+
。
正确的做法,以配合2个第4串是:
^.*(ef?).*$|^.*(mn?).*$
OR
^.*(?:(ef?)|(mn?)).*$
使用^.*(?:(ef?)|(mn?)).+$
,如果必须有一个字符如下e
和可选的f
或m
和opt ional n
如果要匹配的字符串以e
或m
开头,请使用下面的正则表达式。
^(ef?|mn?).+$
注:
.*
匹配任意字符零次或多次。.+
一次或多次匹配任何字符。太棒了。这是我一直想念的问题!虽然你的答案在技术上是正确的,但我建议一个版本显示正确的语法。为了避免怀疑(噢,围绕这么常见的事情),我正在招摇撞骗,让别人做我的工作,我会冒昧地编辑你的答复。如果您不满意,请随时纠正。 +1为一个书呆子级别的准确性。 – 2014-11-03 12:33:39
是的,是的,我做到了。你为什么要问? – 2014-11-03 12:47:22
据我所知,'^。+'表示开始时至少有1个符号。但'efgh'和'mnop'都不包含'ef'或'mn'之前的任何内容。 – Epsilon 2014-11-03 12:30:05
@Epsilon实际上是。它只是不显示。我的错。假装之前有一个角色(或切换为星号而不是加号)。 :) – 2014-11-03 12:31:52