2013-06-19 5 views
-1

Как я могу написать регулярное выражение для этого:Regex: найти пользовательские подстроку, как "(123)", "(ABC)", "(+++)"

список доступных: "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) 
+8

Im запутался ... Каков ваш вклад и каков ваш ожидаемый результат? Также, пожалуйста, напишите какой-нибудь код. –

+2

Неотложная групповая ошибка сообщает вам, что вам нужно либо избежать символа '(' (например, '\ ('), либо иметь соответствующий ')' для него, если вы хотите, чтобы группа захвата вместо литерала '('. – CmdrMoozy

+0

Можно ли использовать [String.contains] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#contains (java.lang.CharSequence))? – Fildor

ответ

0

Это потому, что вы передаете ввод пользователя (1 непосредственно в шаблон компилятора. Компилятор шаблонов экспрессирует регулярное выражение, поэтому, когда он пытался интерпретировать (1, он видит ( и думает о его открытии группы захвата. Что вам нужно сделать, так это избежать (, добавив \. Теперь, как именно вы хотите это сделать, зависит от вашего дизайна. Вы можете просто сказать пользователю, что он вводит регулярное выражение, или вы можете сделать свою собственную функцию, чтобы избежать специальных символов регулярных выражений.

0

Я не совсем уверен, ваши требования, но если вы хотите, чтобы содержимое с кронштейнах (your content) использовать что-то вроде этого

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

Он должен соответствовать

123 
1BC 
+++ 
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 

Если это неверно, предоставьте ожидаемые входы и выходы.

0

Вопрос немного расплывчат, но если вы пытаетесь скомпилировать ввод данных пользователя в качестве регулярного выражения, то вы должны использовать: Pattern.quote(String), чтобы избежать неожиданных ошибок, как это, как пользовательский ввод может содержать специальные символы регулярных выражений:

String regex = Pattern.quote(input); 
Смежные вопросы