我该如何为此编写正则表达式:
可用列表:"some (123)", "other (1BC)", "new (+++)", " do not match"
用户输入:"(1"
寻找带括号的子字符串和里面的一些文本。
但这是崩溃
PatternSyntaxException: Unclosed group near index 3
\b(1
^
at java.util.regex.Pattern.error(Pattern.java:1713)
问题有点模糊,但是如果您尝试将用户输入编译为正则表达式,那么您必须使用:Pattern.quote(String)
以避免像这样的意外错误,因为用户输入可能包含特殊的正则表达式符号:
String regex = Pattern.quote(input);
我猜你现在有这样的东西:
String userInput = "(1";
String realPattern = "\\b" + userInput;
// use realPattern
我认为你只需要在使用它之前转义你的输入。
String userInput = "(1";
String escapedInput = Pattern.quote(userInput);
String realPattern = "\\b" + escapedInput;
// use realPattern
如果这不正确,请提供预期的输入和输出。
我不太确定您的要求,但是如果您想要带括号的内容,请(your content)
使用类似这样的内容
(?<=\()(.+?)(?=\))
它应该匹配
123
1BC
+++
这是因为您将用户输入(1
直接传递给模式编译器。模式编译器正在执行一个正则表达式,所以当它试图解释(1
它时,它会看到(
并认为它是一个捕获组打开。你所要做的就是(
通过添加一个\
. 现在,您究竟想如何做到这一点取决于您的设计。您可能只想告诉用户他正在输入一个正则表达式,或者您可能想创建自己的函数来转义正则表达式的特殊字符。