Подтвердить что ты не робот

Регулярное выражение для совпадающих скобок

Что такое регулярное выражение для соответствия '(' в строке?

Ниже приведен сценарий:

У меня есть строка

str = "abc(efg)";

Я хочу разбить строку на '(', используя регулярное выражение. Для этого я использую

Arrays.asList(Pattern.compile("/(").split(str))

Но я получаю следующее исключение.

java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(

Сбой '(' не работает.

4b9b3361

Ответ 1

Два варианта:

Во-первых, вы можете избежать этого, используя обратную косую черту - \(

В качестве альтернативы, поскольку это один символ, вы можете поместить его в класс символов, где его не нужно экранировать - [(]

Ответ 2

  • Вы можете избежать любого метасимвола, используя обратную косую черту, чтобы вы могли сопоставить ( с шаблоном \(.
  • Многие языки имеют встроенную функцию экранирования, например .Net Regex.Escape или Java Pattern.quote
  • Некоторые варианты поддерживают \Q и \E, с буквальным текстом между ними.
  • Некоторые вкусы (например, VIM) соответствуют ( буквально и требуют \( для захвата групп.

См. также: Справочник по синтаксису регулярного выражения

Ответ 3

Решение состоит из шаблона регулярного выражения, соответствующего открытой и закрывающейся скобкам

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);

Надеюсь, это понятно.

Ответ 4

Для любых специальных символов вы должны использовать '\'. Итак, для совпадающих скобок -/\ (/

Ответ 5

Поскольку ( является специальным в регулярном выражении, вы должны избегать его \( при сопоставлении. Однако в зависимости от того, какой язык вы используете, вы можете легко сопоставить ( со строковыми методами, такими как index() или другими методами, которые позволяют вам найти, в какой позиции находится (. Иногда нет необходимости использовать регулярное выражение.