特殊正则表达式的分析

Aur*_*ril 3 regex

我有一个看起来像这样的正则表达式:

a(|bc)
Run Code Online (Sandbox Code Playgroud)

这个表达式完全匹配字符串"a",但它不匹配"abc".括号中的表达式是什么意思?

编辑: 使用C#和以下代码:

Match m = Regex.Match(TxtTest.Text, TxtRegex.Text);
if (m.Success)
  RtfErgebnis.Text = m.Value;
else
  RtfErgebnis.Text = "Gültig, aber kein Match!";
Run Code Online (Sandbox Code Playgroud)

"TxTTest"包含要测试的字符串(在本例中为"abc")."TxtRegex"包含正则表达式(在本例中为"a(| bc)")

"RtfErgebnis"显示"Gültig,aber kein Match!" 这意味着,正则表达式是有效的,但给定的测试字符串不匹配.

在旁注:

表达方式

a(|bc)d
Run Code Online (Sandbox Code Playgroud)

匹配"广告"以及"abcd".那么为什么前一个表达式与"abc"不匹配?

我对正常表达没有影响.我偶然发现了这个特例.我需要知道如何处理它以进行正则表达式解析和数据生成.

编辑2:

"RtfErgebnis"显示"Gültig,aber kein Match!" 这意味着,正则表达式是有效的,但给定的测试字符串不匹配.

我对传递的参数有一点错误,所以现在显示"a",这是完全正确的.

Dav*_*und 5

管道的意思是"或".你的第一个表达是"a,后面没有bc ".因此,"a"是完全匹配,并且它不打算包括"bc".

第二个表达式是"a,后面没有任何东西bc,后面是d".在该版本中,匹配仅在完全选择所有内容到"d"时完成.

如果你希望它更喜欢"bc"选项而不是任何选项,你可以重写你的表达式:

a(bc)?
Run Code Online (Sandbox Code Playgroud)

这意味着,"a,然后是零或一次出现bc",在这种情况下,大多数引擎会将"abc"而不是"a"视为完全匹配.