Регулярное выражение, которое обнаруживает символ "(кавычки) в тексте, избегая его внутри тегов <> - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно регулярное выражение, которое обнаруживает символ "(кавычки), который находится в тексте, но если он находится внутри тегов (например, <a href="https://bla-bla">), все должно быть в порядке.

Другими словами, регулярное выражение должнонайти кавычки (") в тексте, но если он находится внутри тегов <>, его следует избегать. У меня есть регулярное выражение, которое обнаруживает кавычки внутри тегов <[a-zA-Z\s]+="[\w:\/\.]+">, но я не могу придумать регулярное выражение, которое обнаруживает кавычки в тексте, избегая его, если он находится внутри тегов.

Буду признателен за любую помощь или идеи ... Спасибо.

1 Ответ

0 голосов
/ 17 октября 2019

Хммм ... Это то, что я делаю. Это 1,5 года работы - ола. Этот reg-ex был проверен (используется мной) почти год. Это работает ... в основном ... Примечание: есть один случай, который на самом деле не является ошибкой, но является дискуссионным .... Он не будет соответствовать атрибуту, который сформулирован так: <A HREF = "http://url.com/dir.."> где между равными и значением атрибута есть пробел . Обратите внимание на шаблон WHITESPACE-EQUALS-WHITESPACE .... Это легко модифицируемый, но не правильный HTML.

Я надеюсь, что это ответит на вопрос, который вы задали, если нет - прокомментируйте. Я думаю, что вы спрашиваете о получении атрибутов из тегов HTML. Верный? Ваш reg-ex посмотрел именно то, на что я смотрел долгое время ...:)

Вот как получить значение атрибута HTML:

public static final Pattern P3 = Pattern.compile(   "("                     +
                                                     "[\\w-]+=\"[^\"]*?\""   + "|" +
                                                     "[\\w-]+='[^']*?'"      + "|" +
                                                     "[\\w-]+=[\\w-]*"       + "|" +
                                                     "[\\w-]+"               + "|" +
                                                     "\\s+"                  + "|" +
                                                     "[^>]+"                 + ")",
                                                     Pattern.DOTALL  );

Вот совпадение HTMLрегулярное выражение ... (не часть ответа на ваш вопрос, надеюсь, вы не против!)

public static final Pattern P1 = Pattern.compile
  ("<\\/?(\\w+)"                          +
      "(?:"   +   "[\\w-]+=\"[^\"]*?\""   + "|"   // attribute="any valid string, without (the same) quote"
              +   "[\\w-]+='[^']*?'"      + "|"   // attribute='any valid string without (the same) quote'
              +   "[\\w-]+=[\\w-]*"       + "|"   // attribute=any-valid-string-no-spaces-or-punctuation-etc
              +   "[\\w-]+"               + "|"   // attribute
              +   "\\s+"                  + "|"   // any white-space
              +   "[^>]+"                 + ")*"  // Any miscellaneous characters ("Junk?"), *EXCEPT* a "greater-than"
                                                  // (MUST be THE LAST or-option)
                                                  //      NOTE: The above "|" (or-branch), *MUST* be at the end... or else
                                                  //            It will match everything, (except '>'), and miss the whole point.
                                                  //            (Specifically, the first three attribute-value pair clauses are
                                                  //             how to avoid the greater-than-within-tag problem!!!  
      + "\\/?>",                                  // Ending-HTML-Tag symbol is a "greater-than" or "slash-greater-than"
      Pattern.DOTALL  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...