[英]Regex to match anything except HTML tags when code is encoded using < and >
我正在尝试使用正则表达式来匹配除 HTML 标签之外的任何文本。 我为“正常” HTML 代码找到了这个解决方案:
<[^>]*>(*SKIP)(*F)|[^<]+
但是,我的代码是使用<
编码的。 和>
而不是<
和>
,我无法修改上面的正则表达式以使其正常工作。
例如,给定文本:
Hi <p class=\"hello\">\r\nthere, how are you\r\n</p>
我需要匹配“嗨”和“那里,你好吗”。 请注意,在此示例中,我还需要匹配不在标签之间的文本“hi”。
更新:因为我使用的是 ruby 的 gsub,所以看起来我什至不能使用 *SKIP 和 *F
更新 2:我试图不详细说明,但似乎很重要:我实际上需要替换文本中的所有空格,但不是那些作为标签一部分的空格,无论是< ... >
< ... >
标签或<...>
标签。
您可以使用
text = text.gsub(/(<.*?>|<[^>]*>)|[[:blank:]]/m) { $1 || '_' }
我建议[[:blank:]]
而不是\s
因为我假设您不想替换换行符。 请参阅Ruby 演示。
上面的正则表达式匹配
(<.*?>|<[^>]*>)
- 要么<
, 尽可能少的任何零个或多个字符,并且>
或<
,然后是除>
之外的零个或多个字符,然后是>
|
- 或者[[:blank:]]
- 任何单个水平空白(您也可以使用[\p{Zs}\t]
匹配任何 Unicode 水平空白)。 { $1 || '_' }
替换中的{ $1 || '_' }
块表示当第 1 组匹配时,按原样返回第 1 组值,否则返回_
作为水平空白的替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.