在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
Saturday
和Sunday
Sun
Sunday
。
正则表达式(?:(周六)你|(太阳))日 输入| backref1 _ $ 1_ | backref2 _ $ 2_ | 'concat'_ $ 1 $ 2_ --------- | --------------- | --------------- | -------- -------- 星期六| '星期六'| ''| '周六'+''=周六 星期天| ''| '太阳'| '''太阳'=太阳
而不是读取backref1或backref2只读取两个结果并连接结果。
您可以使用branch-reset运算符:
(?|foo(bar)|still(life)|(like)so)
无论哪个分支匹配,这只会设置第一组。