Java регулярное выражение справки - PullRequest
1 голос
/ 15 апреля 2011

Я пытаюсь заменить все символы между тегом html шрифта на выражение.Я написал небольшую тестовую программу, но она не работает правильно.Вот мое регулярное выражение:

test.replaceAll("<font\b(.*)>", "Something");

Это не работает.

Почему?

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Обратите внимание, что оператор * является жадным , т. Е.

String test = "<font size=\"10\"><b>hello</b></font>";
System.out.println(test.replaceAll("<font\\b(.*)>", "Something"));

печатает

Something

Возможно, вы захотитеиспользуйте [^>]*

test.replaceAll("<font\\b([^>]*)>", "Something")

или квантификатор , *?:

test.replaceAll("<font\\b(.*?)>", "Something")

, что приводит к

Something<b>hello</b></font>
2 голосов
/ 15 апреля 2011

Возможно, вам нужно два "\" перед "b":

test.replaceAll("<font\\b(.*)>", "Something");

Это нужно вам, потому что регулярное выражение является строкой, а обратные слеши необходимо экранировать в строках.

Чтобы он соответствовал только первому «>», сделайте следующее:

test.replaceAll("<font\\b(.*?)>", "Something");

Это сделает * «ленивым», так что он будет совпадать как можно меньше, а не как можно больше.

Однако, кажется, что лучше написать это конкретное выражение следующим образом:

test.replaceAll("<font\\b([^>]*)>", "Something");

Это имеет тот же эффект и позволяет избежать обратного отслеживания, что должно повысить производительность.

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