Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法识别两个关键字_C#_Regex - Fatal编程技术网

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行

abcd
efgh
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的准确度。是的,是的,我做到了。你为什么这么问?