gpt4 book ai didi

java - 首先匹配最小嵌套部分的正则表达式

转载 作者:行者123 更新时间:2023-11-30 06:40:35 25 4
gpt4 key购买 nike

我对正则表达式还很陌生。我没有太多经验。我已经在互联网上搜索并在 regex101.com 上尝试了很多东西。似乎没有任何作用。

这是模式: \\((.*?)\\)

我将它与 JavareplaceAll 结合使用来添加 ?:给每个(...)以字符串形式提供(用户输入)。

用户输入也用作正则表达式。但目前我将其视为普通字符串。

想象一下这个用户输入:(Welcome, (StackOverflow|World)|Hello, Dad)

我想要的结果是:(?:Welcome, (?:StackOverflow|World)|Hello, Dad)

但我只得到第一个 ?: :(?:Welcome, (StackOverflow|World)|Hello, Dad)

<小时/>

我想,我明白这个问题了。 我猜,正则表达式从右到左扫描并试图获得最小的匹配(请参阅 .*? )。它搜索(直到下一个) 。这是(Welcome, (StackOverflow|World) .

<小时/>

我可以做什么来首先匹配这些嵌套匹配项?我不能让用户修改他们的输入。我必须找到一个更好的正则表达式模式来从最小可能匹配到最大可能匹配,而不是从左到右。

最佳答案

我建议搜索任何未转义的 ( (以免在文字 ?: 之后添加 ( )后面不跟 ? (以避免匹配环视/非捕获组/等,):

(?<!\\)((?:\\{2})*)\((?!\?)

并替换为 $1(?: 。请参阅regex demo .

Java 声明:

String pat = "(?<!\\\\)((?:\\\\{2})*)\\((?!\\?)";

详细信息:

  • (?<!\\) - 当前位置左侧没有反斜杠
  • ((?:\\{2})*) - 第 1 组:零个或多个偶数反斜杠
  • \( - 字面量 ( ...
  • (?!\?) - 后面没有紧跟着文字 ? .

关于java - 首先匹配最小嵌套部分的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433857/

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