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

Ste*_*han 10 php c# regex branch reset

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

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

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

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

Ala*_*ore 12

.NET不支持分支复位操作,但它支持命名的组,它可以让你重用组名称,而不限制(这是其他的味道呢,据我所知).所以你可以使用这个:

(?:(?<abbr>Sat)ur|(?<abbr>Sun))day
Run Code Online (Sandbox Code Playgroud)

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

  • Perl 允许您以相同的模式重用命名组。没有限制。这也允许您取回匹配的命名组列表。 (3认同)
  • 使用PCRE,您可以使用`(?J)`修饰符(必须放在模式的第一个位置),允许使用具有相同名称的命名组.(这是一劳永逸的选择,你不能在之后取消它). (2认同)