繁体   English   中英

当代码使用 < 和 > 编码时,正则表达式匹配除 HTML 标记之外的任何内容

[英]Regex to match anything except HTML tags when code is encoded using < and >

我正在尝试使用正则表达式来匹配除 HTML 标签之外的任何文本。 我为“正常” HTML 代码找到了这个解决方案:

<[^>]*>(*SKIP)(*F)|[^<]+

但是,我的代码是使用&lt;编码的。 &gt; 而不是<> ,我无法修改上面的正则表达式以使其正常工作。

例如,给定文本:

Hi &lt;p class=\"hello\"&gt;\r\nthere, how are you\r\n&lt;/p&gt;

我需要匹配“嗨”和“那里,你好吗”。 请注意,在此示例中,我还需要匹配不在标签之间的文本“hi”。

更新:因为我使用的是 ruby 的 gsub,所以看起来我什至不能使用 *SKIP 和 *F

更新 2:我试图不详细说明,但似乎很重要:我实际上需要替换文本中的所有空格,但不是那些作为标签一部分的空格,无论是&lt; ... &gt; &lt; ... &gt; 标签或<...>标签。

您可以使用

text = text.gsub(/(&lt;.*?&gt;|<[^>]*>)|[[:blank:]]/m) { $1 || '_' }

我建议[[:blank:]]而不是\s因为我假设您不想替换换行符。 请参阅Ruby 演示

上面的正则表达式匹配

  • (&lt;.*?&gt;|<[^>]*>) - 要么&lt; , 尽可能少的任何零个或多个字符,并且&gt; < ,然后是除>之外的零个或多个字符,然后是>
  • | - 或者
  • [[:blank:]] - 任何单个水平空白(您也可以使用[\p{Zs}\t]匹配任何 Unicode 水平空白)。

{ $1 || '_' } 替换中的{ $1 || '_' }块表示当第 1 组匹配时,按原样返回第 1 组值,否则返回_作为水平空白的替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM