gpt4 book ai didi

.net 正则表达式与条件后视和捕获组

转载 作者:行者123 更新时间:2023-12-04 14:56:14 24 4
gpt4 key购买 nike

图案:a(?(?<! ) )b (c)
输入:a b c
描述:条件应该匹配空格,如果lookbehind 不是空格。

它匹配正确,但捕获组 $1 为空(而不是包含 c)。

这是 .net regex 的问题还是我遗漏了什么?

示例:http://regexstorm.net/tester?p=a(%3f(%3f%3C!+)+)b+(c)&i=a+b+c

最佳答案

我不确定这种行为是否被记录在案(如果是,那么我没有找到它)但是使用了一个条件结构,包括 显式零宽度断言 作为其表达式 (?(?=expression)yes|no)覆盖下一个编号的捕获组(清空它)。您可以通过在 RegEx 下运行来确认这一点:

a(?(?<! ) )b (c)()

解决这个问题的四种方法:
  • @DmitryEgorov 指出的括号中的括起来的表达式(也保持第二
    捕获组完好无损)并且不包含在结果中 - 正确的
    道路:
    a(?((?<! )) )b (c)
  • 由于此行为仅适用于未命名的捕获组
    (默认)您可以使用命名捕获组获得预期结果:
    a(?(?<! ) )b (?<first>c)
  • (c) 之间随意添加一个额外的捕获组和有条件的:
    a(?(?<! ) )(b) (c)
  • 如果可能,避免使用这样的表达式。例如:
    a(?( ) )b (c)
  • 关于.net 正则表达式与条件后视和捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991092/

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