正则表达式:找到自定义子字符串,如“(123)”,“(ABC)”,“(+++)”

时间:2013-06-19 15:44:29

标签: java regex

我如何为此编写正则表达式:

可用列表:"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)

4 个答案:

答案 0 :(得分:0)

这是因为您将用户输入(1直接传递给模式编译器。模式编译器正在使用正则表达式,所以当它试图解释(1时,它会看到(并认为它是一个捕获组开放。您需要做的是通过添加(来逃避\。现在你想要做到这一点取决于你的设计。您可能只想告诉用户他正在输入正则表达式,或者您可能想要创建自己的函数来逃避正则表达式特殊字符。

答案 1 :(得分:0)

我不确定您的要求,但如果您希望带有括号(your content)的内容使用类似的内容

(?<=\()(.+?)(?=\))

匹配

123
1BC
+++

答案 2 :(得分:0)

我猜你现在有这样的事情:

String userInput = "(1";
String realPattern = "\\b" + userInput;
// use realPattern

我认为您在使用之前只需要escape输入。

String userInput = "(1";
String escapedInput = Pattern.quote(userInput);
String realPattern = "\\b" + escapedInput;
// use realPattern

如果这不对,请提供预期的输入和输出。

答案 3 :(得分:0)

问题有点模糊,但如果您尝试将用户输入编译为正则表达式,则必须使用:Pattern.quote(String)来避免此类意外错误,因为用户输入可能包含特殊的正则表达式符号:

String regex = Pattern.quote(input);