Поиск слов в скобках, содержащих один символ, с помощью регулярных выражений - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь найти все слова, которые заключены в двойные скобки и содержат скобку в середине слова, я использую Java.

У меня пока есть это, но оно не совсем работает.

\\[\\[[\\[|\\]]\\]\\]

Есть предложения?

Для этого примера ввода "hello [[wo[orld]]" я бы хотел найти "[[wo[orld]]".

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

Это должно сделать:

String str = "hello [[wo[orld]]";

Pattern p = Pattern.compile("\\[\\[[^\\[\\]]*[\\[\\]][^\\[\\]]*\\]\\]");
Matcher m = p.matcher(str);

if (m.find())
    System.out.println(m.group(0));

Вывод:

[[wo[orld]]

Разбивка образца:

  • \[\[ - Два начальных [[ (вы уже поняли это правильно!)
  • [^\[\]]* - Что-то еще, кроме [ и ] ноль или более раз
  • [\[\]] - Символ «средней» скобки
  • [^\[\]]* - Что-то, кроме [ и ] ноль или более раз
  • \]\] -Два закрывающих ]] (тот, который вы тоже выяснили)
1 голос
/ 02 сентября 2011

Если вы хотите захватить то, что находится в двойных скобках, и если вам все равно, есть ли другие символы, не заключенные в скобки, вокруг одинарных скобок, попробуйте:

(\[\[[^\[\]]*\[[^\[\]]*\]\])

В противном случае, если вокруг самой внутренней скобки должен быть хотя бы один символ, не заключенный в скобки, поменяйте звездочки на плюсы, иначе:

(\[\[[^\[\]]+\[[^\[\]]+\]\])

0 голосов
/ 02 сентября 2011

Термин скобка немного перегружен, но я предполагаю, что вы пытаетесь сопоставить строки вида:

[[некоторые [вещь]]

String sampleString = "[[some[thing]]";
System.out.println(Pattern.matches("\\[\\[.*\\[.*\\]\\]", sampleString)); //true

Pattern.matches () - статический метод, который возвращает true для совпадения, иначе false

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