Использование регулярных выражений для соответствия HTML - PullRequest
1 голос
/ 25 мая 2011

Вот строка ввода HTML:

Джонни: Мой любимый цвет - розовый Сара: Мой любимый цвет - синий Джонни: Давайте поменяемся местами? Сара: ОК!

Я хочу сопоставить регулярное выражение с полужирным шрифтом часть выше.По сути, найдите любые совпадения между ">" (или началом строки) и ":"

Я сделал это регулярное выражение (?>)[^>](.+):, но он не работал правильно, он выделил жирным шрифтомдетали ниже, включая тег

.Я не хочу соответствовать ни одному тегу HTML:

Джонни: Мой любимый цвет - розовый Сара: Мой любимый цвет - синий Джонни: Давайте поменяемся местами? Сара: ОК!

Я использую Java с таким кодом:

Matcher m = Pattern.compile("`(?>)[^>](.+):`", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(string); 

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Следующий код должен работать:

String str = "<p>Johnny Smith: My favorite color abc: is pink<br />" +
"Sarah: My favorite color is dark: blue<br />" +
"Johnny: Let's swap: genders?<br />" +
"Sarah: OK: sure!<br />" +
"</p>";

Pattern p = Pattern.compile("(?:>|^)([\\w\\s]+)(?=:)", Pattern.MULTILINE);
Matcher m = p.matcher(str); 
while(m.find()){
    System.out.println(m.group(1));
}

ВЫХОД

Johnny Smith
Sarah
Johnny
Sarah
0 голосов
/ 25 мая 2011

Если вы хотите найти совпадение, когда за словом следует «:», тогда достаточно «\ w +:».Но если вы хотите включить возможность '>', вы можете попробовать:

        String s = "<p>Johnny: My favorite color is pink<br />" +
            "Sarah: My favorite color is blue<br />" +
            "Johnny: Let's swap genders?<br />" +
            "Sarah: OK!<br />" +
            "</p>";

    Pattern p = Pattern.compile("[>]?(\\w+):");
    Matcher m = p.matcher(s); 
    while(m.find()){
        System.out.println(m.start()+" : "+m.group(1));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...