正则表达式在JAVA中引发异常,在PHP中工作
我有一个工作PHP正则表达式,它是正则表达式在JAVA中引发异常,在PHP中工作,java,regex,pattern-matching,Java,Regex,Pattern Matching,我有一个工作PHP正则表达式,它是 \w+[\(](\?*)\w+[\,](\?*)\w+[\)] 此处提供了其工作的链接 我可以按预期在PHP中使用它,但当我在JAVA中使用相同的时,它会给我一个例外 Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 37 (?<A>\w+\((\?*)\w+(,(\?*)\w+)?\))(,(
\w+[\(](\?*)\w+[\,](\?*)\w+[\)]
此处提供了其工作的链接
我可以按预期在PHP中使用它,但当我在JAVA中使用相同的时,它会给我一个例外
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 37 (?<A>\w+\((\?*)\w+(,(\?*)\w+)?\))(,(?&A))*
线程“main”java.util.regex.PatternSyntaxException中的异常:索引37附近的未知内联修饰符(?\w+\(\?*)\w+(,(\?*)\w+)(,(?&A))*
我对正则表达式和java不是很精通,但我得到的是,在阅读了internet上的一些相关问题后,可能会出现一些支持问题,因为正则表达式工作正常,并且它在PHP中给出了准确的结果,问题出在java中的某些地方
这方面需要帮助。Java正则表达式不支持递归和子例程调用,
(?&A)
在此无效。另外,不要忘记使用双反斜杠来转义Java字符串文本中的正则表达式元字符
唯一的解决办法是重复(?:
(?。我删除了内部捕获组,因为您很可能不会使用它们。Java正则表达式不支持递归和子例程调用,(?&A)
在这里无效。另外,不要忘记使用双反斜杠来转义Java字符串文本中的正则表达式元字符
唯一的解决办法是重复(?:
(?。我删除了内部捕获组,因为您很可能不会使用它们。Java正则表达式不支持递归和子例程调用,(?&A)
无效。只需替换为组模式。不要忘了使用双反斜杠来转义Java字符串文本中的正则表达式元字符。请参阅。我用您的正则表达式替换了我的正则表达式,它不会引发异常,但也找不到模式。任何我获得线索的方法都让我来解决。感谢您的时间和努力。我删除了t内部捕获组,你需要它们吗?把它们放在原来的地方就行了。我没有让它工作,我正在把它分成块,并尝试使用两个java兼容的正则表达式来找到它。它能满足你的需要吗?java正则表达式不支持递归和子例程调用,(?&A)
无效。只需替换为组模式。不要忘了使用双反斜杠来转义Java字符串文本中的正则表达式元字符。请参阅。我用您的正则表达式替换了我的正则表达式,它不会引发异常,但也找不到模式。任何我获得线索的方法都让我来解决。感谢您的时间和努力。我删除了t他说,“你需要它们吗?把它们放在原来的地方就行了。我不想让它工作,我把它分成几块,然后用两个与java兼容的正则表达式来分块找到它。它能满足你的需要吗?”?
(?<A>
\w+\(
\?*\w+
(?:,\?*\w+)?
\)
)
(,
\w+\(
\?*\w+
(?:,\?*\w+)?
\)
)*
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));
}
}