首页 > 解决方案 > 一个正则表达式,它在文本中检测符号“(引号),避免在标签 <> 中使用它

问题描述

我需要一个正则表达式来检测位于文本中的符号“(引号),但如果它位于标签内(例如<a href="https://bla-bla">),它应该没问题。

换句话说,正则表达式应该在文本中找到引号(“),但如果它在标签内<>,它应该避免它。我有一个正则表达式可以检测标签内的引​​号,<[a-zA-Z\s]+="[\w:\/\.]+">但我无法想出一个正则表达式来检测文本中的引号避免如果它位于标签内。

我将不胜感激任何帮助或想法...谢谢。

标签: regex

解决方案


嗯...这就是我所做的。这是 1.5 年的工作 ola。这个 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  );

推荐阅读