C# 无法识别两个关键字
如果我问错了问题,请告诉我。不确定我是否从正确的角度接近它 我的正则表达式看起来像这样C# 无法识别两个关键字,c#,regex,C#,Regex,如果我问错了问题,请告诉我。不确定我是否从正确的角度接近它 我的正则表达式看起来像这样 ^.+(ef?)|(mn?).+$ 我试图匹配下面文本中的第2行和第4行 abcd efgh ijkl mnop qrst 看起来,只有最后一个引起了编辑们的注意。我错过了什么 我曾尝试跟踪检测例如“ALPHA”和“BETA”单词,但显然,我对它的工作原理一无所知。正则表达式引擎会将下面的正则表达式分成两部分 ^.+(ef?)|(mn?).+$ Part 1| Part 2 首先,将执行第1部分 ^
^.+(ef?)|(mn?).+$
我试图匹配下面文本中的第2行和第4行
abcdefgh
ijkl
mnop
qrst 看起来,只有最后一个引起了编辑们的注意。我错过了什么
我曾尝试跟踪检测例如“ALPHA”和“BETA”单词,但显然,我对它的工作原理一无所知。正则表达式引擎会将下面的正则表达式分成两部分
^.+(ef?)|(mn?).+$
Part 1| Part 2
首先,将执行第1部分
^.+(ef?)
+
确保在e
之前必须至少有一个字符,但没有。所以它与第二个不匹配。并且对所有其他字符串都失败,因为剩余字符串中没有字符e
|
或
现在正则表达式引擎移动到第二部分
(mn?).+$
匹配包含字母m
的字符串m
仅出现在第四个字符串中。因此它匹配m
加上以下一个或多个字符,因为+
匹配第2个和第4个字符串的正确方法是:
^.*(ef?).*$|^.*(mn?).*$
或
^.*(?:(ef?)|(mn?)).*$
如果必须在e
后面加上一个字符和一个可选的f
或m
以及一个可选的n
如果要匹配以e
或m
开头的字符串,请使用下面的正则表达式
^(ef?|mn?).+$
注意:
与任何字符零次或多次匹配*
匹配任何字符一次或多次+
^.+
表示开始时至少有一个符号。但是efgh
和mnop
在ef
或mn
@Epsilon之前都不包含任何内容。它只是不显示。我的错。假设前面有一个角色(或者切换到星号而不是加号):)令人惊叹的。这就是我一直忽略的问题!虽然您的答案在技术上是正确的,但我建议您编写一个显示正确语法的版本。为了避免让人怀疑(哦,这是一件很平常的事情),我正在做我的工作,并让别人做我的工作,我将冒昧地编辑你的回复。如果您对它不满意,请随意更正+1的准确度。是的,是的,我做到了。你为什么这么问?