регулярное выражение с переменной длины нулевой ширины в Java - PullRequest
0 голосов
/ 23 октября 2018

Я понимаю, что Java не поддерживает внешние объекты переменной длины с нулевой шириной, но есть ли эффективный и эффективный способ имитировать желаемое поведение?

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

blah words blah [tag platform="platform1, platform5" future]Blah Blah blah[/tag] blah more words

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

Blah Blah blah

Это то, что я хочу сделать для представления списка переменных платформ:

(?<=\\[tag platform=\\\\\".*?\\\\\" future\\]).*?(?=\\[/tag\\])

Но, конечно, он выбрасываетисключение с сообщением Look-behind group does not have an obvious maximum length.

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Это должно работать для вас.Не нужно оглядываться назад Просто "захватить" необходимую часть и заменить всю строку (или что-то еще)

public static void main(String[] args) {
    String s = "blah words blah [tag platform=\"platform1, platform5\" future]Blah Blah blah[/tag] blah more words";
    s = s.replaceAll(".*?\\[tag.*?\\](.*?)(?=\\[.*).*", "$1");
    System.out.println(s);
}

O / P:

Blah Blah blah
0 голосов
/ 24 октября 2018

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

(?:\[tag platform=\".*?\" future\])(.*?)(?:\[\/tag\])

On Regex101

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