Ответ 1
Два варианта:
Во-первых, вы можете избежать этого, используя обратную косую черту - \(
В качестве альтернативы, поскольку это один символ, вы можете поместить его в класс символов, где его не нужно экранировать - [(]
Что такое регулярное выражение для соответствия '(' в строке?
Ниже приведен сценарий:
У меня есть строка
str = "abc(efg)";
Я хочу разбить строку на '('
, используя регулярное выражение. Для этого я использую
Arrays.asList(Pattern.compile("/(").split(str))
Но я получаю следующее исключение.
java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(
Сбой '('
не работает.
Два варианта:
Во-первых, вы можете избежать этого, используя обратную косую черту - \(
В качестве альтернативы, поскольку это один символ, вы можете поместить его в класс символов, где его не нужно экранировать - [(]
(
с шаблоном
\(
.Regex.Escape
или Java Pattern.quote
\Q
и \E
, с буквальным текстом между ними.(
буквально и требуют \(
для захвата групп.Решение состоит из шаблона регулярного выражения, соответствующего открытой и закрывающейся скобкам
String str = "Your(String)";
// parameter inside split method is the pattern that matches opened and closed parenthesis,
// that means all characters inside "[ ]" escaping parenthesis with "\\" -> "[\\(\\)]"
String[] parts = str.split("[\\(\\)]");
for (String part : parts) {
// I print first "Your", in the second round trip "String"
System.out.println(part);
}
Написание в стиле Java 8 можно решить следующим образом:
Arrays.asList("Your(String)".split("[\\(\\)]"))
.forEach(System.out::println);
Надеюсь, это понятно.
Для любых специальных символов вы должны использовать '\'. Итак, для совпадающих скобок -/\ (/
Поскольку (
является специальным в регулярном выражении, вы должны избегать его \(
при сопоставлении. Однако в зависимости от того, какой язык вы используете, вы можете легко сопоставить (
со строковыми методами, такими как index()
или другими методами, которые позволяют вам найти, в какой позиции находится (
. Иногда нет необходимости использовать регулярное выражение.