Как сделать шаблон регулярного выражения для простого текста HTML? - PullRequest
2 голосов
/ 10 декабря 2010

Я пытаюсь выучить шаблоны регулярных выражений для класса.Я делаю простой HTML Lexer / Parser.Я знаю, что это не лучший и не самый эффективный способ создания Lexer / Parser, но это только для понимания шаблонов Regex.

Итак, мой вопрос: как мне создать шаблон, который проверяет, не содержит ли строка какие-либо HTML-теги (например, <TAG>) и не содержит никаких HTML-объектов (например, &ENT;)?

Это то, что я мог придумать до сих пор, но это все еще не работает:

.+?(^(?:&[A-Za-z0-9#]+;)^(?:<.*?>))

РЕДАКТИРОВАТЬ: Единственная проблема заключается в том, что я не могу отменить финалВ результате мне нужно найти полный шаблон, который бы выполнил эту задачу, если это возможно, хотя это может быть не красиво.Я никогда не упоминал, но он должен соответствовать любому простому тексту на странице HTML.

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Вы можете использовать выражение <.+?>|&.+?; для поиска соответствия, а затем отменить результат.

  • <.+?> говорит сначала: <, затем что-нибудь (один или несколько раз), затемa >
  • &.+?; говорит сначала a &, затем что-нибудь (один или несколько раз), затем ;

Вот полный пример с ideone.com демо здесь .

import java.util.regex.*;

public class Test {
    public static void main(String[] args) {
        String[] tests = { "hello", "hello <b>world</b>!", "Hello&nbsp;world" };
        Pattern p = Pattern.compile("<.+?>|&.+?;");
        for (String test : tests) {
            Matcher m = p.matcher(test);
            if (m.find())
                System.out.printf("\"%s\" has HTML: %s%n", test, m.group());
            else
                System.out.printf("\"%s\" does have no HTML%n", test);
        }
    }
}

Вывод:

"hello" does have no HTML
"hello <b>world</b>!" has HTML: <b>
"Hello&nbsp;world" has HTML: &nbsp;
1 голос
/ 10 декабря 2010

Если вы ищете для сопоставления строк, которые НЕ следуют шаблону, самое простое, что нужно сделать, это сопоставить шаблон и затем отменить результат теста.этот шаблон будет иметь по крайней мере один тег (как вы его определили) или сущность (как вы ее определили).Таким образом, строки, которые вы хотите, являются строками, которые НЕ соответствуют этому шаблону (у них не будет НИКАКИХ тегов или объектов).

...