-1

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

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

4 回答 4

0

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

String regex = Pattern.quote(input);
于 2013-06-19T16:08:05.067 回答
0

我猜你现在有这样的东西:

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

我认为你只需要在使用它之前转义你的输入。

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

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

于 2013-06-19T16:02:39.503 回答
0

我不太确定您的要求,但是如果您想要带括号的内容,请(your content)使用类似这样的内容

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

它应该匹配

123
1BC
+++
于 2013-06-19T15:59:14.930 回答
0

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

于 2013-06-19T15:54:46.793 回答