Регулярное выражение для соответствующих скобок - PullRequest
52 голосов
/ 12 апреля 2011

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

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

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

str = "abc(efg)";

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

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

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

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

Экранирование '(' не кажетсяна работу.

Ответы [ 5 ]

89 голосов
/ 12 апреля 2011

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

Во-первых, вы можете избежать его, используя back slash - \(

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

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

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

3 голосов
/ 08 мая 2015

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

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

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

2 голосов
/ 12 апреля 2011

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

1 голос
/ 12 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...