gpt4 book ai didi

java - 正则表达式在 JAVA 中抛出异常,在 PHP 中工作

转载 作者:行者123 更新时间:2023-11-29 08:43:05 25 4
gpt4 key购买 nike

我有一个有效的 PHP 正则表达式,它是

\w+[\(](\?*)\w+[\,](\?*)\w+[\)]

此处提供其工作链接 https://regex101.com/r/tB2pS3/1

我可以按预期在 PHP 中使用它,但是当我在 JAVA 中使用它时,它给了我一个异常(exception)

Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 37 (?<A>\w+\((\?*)\w+(,(\?*)\w+)?\))(,(?&A))*

我不太精通正则表达式和 java,但我得到的是在互联网上阅读了一些相关问题后可能存在一些支持问题,因为正则表达式工作正常并且它在 PHP 中给出了准确的结果,问题出在JAVA 一些地方。

在这方面需要帮助。

最佳答案

Java 正则表达式不支持递归子程序调用(?&A)在这里无效。另外,不要忘记使用双反斜杠来转义 Java 字符串文字中的正则表达式元字符。

唯一的出路是重复 (?<A>)末尾的组模式,请参阅 this demo :

(?<A>
\w+\(
\?*\w+
(?:,\?*\w+)?
\)
)
(,
\w+\(
\?*\w+
(?:,\?*\w+)?
\)
)*

我在这里建议一种构建 block 的方法,当您首先定义 block ,然后构建动态模式时:

String block = "\\w+\\(\\?*\\w+(?:,\\?*\\w+)?\\)";
String pat = "(" + block + ")(," + block + ")*";
List<String> strs = Arrays.asList("a(b)", "a(?v)", "a(b),c(?c,a)");
for (String str : strs) {
Matcher m = Pattern.compile(pat).matcher(str);
while (m.find()) {
System.out.println(m.group(0));
}
}

参见 Java demo .我删除了内部捕获组,因为很可能您无论如何都不会使用它们。

关于java - 正则表达式在 JAVA 中抛出异常,在 PHP 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693477/

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