gpt4 book ai didi

c# - RightToLeft 标志和原子组

转载 作者:行者123 更新时间:2023-11-30 23:16:21 25 4
gpt4 key购买 nike

为什么 a(?>.*) 在 RightToLeft 激活时不匹配 abc

我期望它的工作方式是:

  1. 最右边的字符 (c) 与 a 不匹配。
  2. 下一个字符是b。它再次与 a 不匹配。
  3. a 匹配a;原子组内的贪心 . 将匹配 b 和 c。没有更多的字符,并且满足正则表达式。

最佳答案

问题实际上与 RightToLeft 选项无关。字符串以相反的顺序搜索,但需要考虑的另一件事是模式标记也以相反的顺序进行测试。所以首先是(?>.*),然后是a

原子组禁止回溯。由于 .* 默认是贪心的,它先取 c,然后是 b,然后是 a(换句话说,它取“abc”),但由于原子组 .*不会返回字符 (a),模式将失败。

(请注意,在没有 RightToLeft 选项的情况下,您处于尝试使用模式 (?>.*)a 查找“cba”中出现的相同情况)

没有 RightToLeft 选项的更简单示例,始终使用字符串“abc”但使用模式 a(?>.*)c:

a         =>   a
a(?>.*) => abc
a(?>.*)c => FAIL since (?>.*) don't give back the c

如果这次我使用非捕获组而不是原子组:a(?:.*)c

a         =>   a
a(?:.*) => abc
a(?:.*)c => FAIL
a(?:.*) => ab (Backtracking)
a(?:.*)c => abc (Succeed)

关于c# - RightToLeft 标志和原子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com