我有一个小程序允许用户输入一些正则表达式。之后我想检查这个输入是否是一个 有效 的正则表达式。
我想知道 Java 中是否有内置方法,但找不到这样的 jet。
你能给我一些建议吗?
原文由 Philipp Andre 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个小程序允许用户输入一些正则表达式。之后我想检查这个输入是否是一个 有效 的正则表达式。
我想知道 Java 中是否有内置方法,但找不到这样的 jet。
你能给我一些建议吗?
原文由 Philipp Andre 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以只 Pattern.compile
正则表达式字符串,看看它是否 throws PatternSyntaxException
。
String regex = "***";
PatternSyntaxException exc = null;
try {
Pattern.compile(regex);
} catch (PatternSyntaxException e) {
exc = e;
}
if (exc != null) {
exc.printStackTrace();
} else {
System.out.println("Regex ok!");
}
这一个特别产生以下输出:
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
***
^
这是来自旧的可信赖的 regular-expressions.info 的引述:
关于 Lookbehind 的重要说明
Java 通过允许有限重复使事情更进一步。您仍然不能使用星号或加号,但可以使用问号和花括号并指定最大参数。 Java 认识到有限重复可以重写为具有 不同但固定长度 的字符串的交替。
我认为该短语包含错字,应该说“不同但长度有限”。无论如何,Java 似乎确实允许在回顾中交替使用不同的长度。
System.out.println(
java.util.Arrays.toString(
"abracadabra".split("(?<=a|ab)")
)
); // prints "[a, b, ra, ca, da, b, ra]"
还有一个错误,您实际上可以在其中进行无限长度的回顾 _并使其正常工作_,但我不会依赖这种行为。
System.out.println(
"1234".replaceAll(".(?<=(^.*))", "$1!")
); // prints "1!12!123!1234!"
原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 2.5 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
这是一个例子。
java RegexTester "(capture"
然后输出"Unclosed group"
,例如。