gpt4 book ai didi

java - 如何将数量条件添加到正则表达式而不将数量包含到匹配组中?

转载 作者:行者123 更新时间:2023-11-30 05:47:59 27 4
gpt4 key购买 nike

我只想在附加数量条件成立时创建匹配项。

示例(很好):

正则表达式:-(START.*?)_\d+(?=-END)

输入:test-START_one_two_third_4-END

匹配组 1:START_one_two_third

无论如何,我想添加一个额外的检查,在组匹配中,应该有 _{3,4} 字符。但并没有直接互相关注。

所以我必须使用 (?:...) 创建一个额外的非捕获组。我尝试过的方法:查找 _* 4 次,直到 -END:

(?:(?:_[^_]*){4}-END)

但是将其添加到正则表达式中将不再创建匹配项。为什么?

https://regex101.com/r/MHzWBr/2

最佳答案

您可以在此处使用前瞻:

-(START(?=(?:_[^_]*){3,4}-END).*?)_+\d+(?=-END) 
^

请参阅regex demo

现在,(?=(?:_[^_]*){3,4}-END) 是一个正向前瞻,确保紧邻当前位置的右侧,有

  • (?:_[^_]*){3,4} - 重复三到四次 _,后跟除 之外的任何 0+ 个字符_
  • -END - 文字 -END 字符串。
  • .*?

请注意,如果您想匹配 -START-END 之间最接近的窗口,则需要排除 [^_] 匹配 -START-END 模式的开头:

-(START(?=(?:_(?:(?!-(?:END|START))[^_])*){3,4}-END)(?:(?!-(?:END|START)).)*)_+\d+(?=-END)

参见this regex demo

(?:(?!-(?:END|START)).)* 模式是 tempered greedy token .

关于java - 如何将数量条件添加到正则表达式而不将数量包含到匹配组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519624/

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