C# 中 php(pcre) 中的分支重置运算符 (“?|”) 相当于什么?
以下正则表达式将匹配“Saturday”或“Sunday”:(?:(Sat)ur|(Sun))day
但在一种情况下,反向引用 1 被填充,而反向引用 2 为空,并且在其他情况反之亦然。
PHP (pcre) 提供了一个很好的运算符“?|”从而规避了这个问题。之前的正则表达式将变为 (?|(Sat)ur|(Sun))day
。所以不会有空的反向引用。
C# 中是否有等效项或某种解决方法?
The following regular expression will match "Saturday" or "Sunday" : (?:(Sat)ur|(Sun))day
But in one case backreference 1 is filled while backreference 2 is empty and in the other case vice-versa.
PHP (pcre) provides a nice operator "?|" that circumvents this problem. The previous regex would become (?|(Sat)ur|(Sun))day
. So there will not be empty backreferences.
Is there an equivalent in C# or some workaround ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
.NET 不支持分支重置运算符,但它支持命名组,并且它允许您不受限制地重用组名称(据我所知,其他风格没有这样做)。所以你可以使用这个:
...并且缩写名称将存储在
Match.Groups["abbr"]
中。.NET doesn't support the branch-reset operator, but it does support named groups, and it lets you reuse group names without restriction (something no other flavor does, AFAIK). So you could use this:
...and the abbreviated name will be stored in
Match.Groups["abbr"]
.应该可以连接 backref1 和 backref2。
因为每个都始终为空,并且与空连接的字符串仍然是相同的字符串...
使用您的正则表达式
(?:(Sat)ur|(Sun) )day
和替换$1$2
Saturday
为Sat
,Sun
为代码>周日。
无需读取 backref1 或 backref2,只需读取两个结果并连接结果。
should be possible to concat backref1 and backref2.
As one of each is always empty and a string concat with empty is still the same string...
with your regex
(?:(Sat)ur|(Sun))day
and replacement$1$2
you get
Sat
forSaturday
andSun
forSunday
.instead of reading backref1 or backref2 just read both results and concat the result.
您可以使用分支重置运算符:
无论哪个分支匹配,它都只会设置第一组。
You can use the branch-reset operator:
That will only set group one no matter which branch matches.