在C#中的php(pcre)中找到的分支重置运算符(“?|”)的等价物是什么?

以下正则表达式将匹配“星期六”或“星期日” (?:(Sat)ur|(Sun))day

但是在一种情况下,后向引用1被填充,而后向引用2是空的而在另一种情况下反之亦然。

PHP(pcre)提供了一个很好的运算符“?|” 这可以避免这个问题。 之前的正则表达式将成为(?|(Sat)ur|(Sun))day 。 所以不会有空的反向引用。

C#中是否存在等价物或某些解决方法?

.NET不支持分支重置操作符,但它支持命名组,它允许您无限制地重用组名(没有其他风格的东西,AFAIK)。 所以你可以使用这个:

 (?:(?Sat)ur|(?Sun))day 

…缩写名称将存储在Match.Groups["abbr"]

应该可以连接backref1和backref2。
由于其中一个总是空的,一个字符串concat with empty仍然是相同的字符串…

与你的正则表达式(?:(Sat)ur|(Sun))day(?:(Sat)ur|(Sun))day和更换$1$2
SaturdaySunday Sun Sunday

 正则表达式(?:(周六)你|(太阳))日
 输入|  backref1 _ $ 1_ |  backref2 _ $ 2_ |  'concat'_ $ 1 $ 2_
  --------- | --------------- | --------------- | -------- --------
 星期六|  '星期六'|  ''|  '周六'+''=周六
 星期天|  ''|  '太阳'|  '''太阳'=太阳

而不是读取backref1或backref2只读取两个结果并连接结果。

您可以使用branch-reset运算符:

 (?|foo(bar)|still(life)|(like)so) 

无论哪个分支匹配,这只会设置第一组。

Interesting Posts