当代码使用 < 和 > 编码时,正则表达式匹配 HTML 标签以外的任何内容
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”和“there, how are you”。请注意,我还需要匹配不在标签之间的文本,在此示例中为“hi”。
更新:因为我正在使用 ruby 的 gsub,看起来我什至不能使用 *SKIP 和 *F
更新 2:我试图不涉及太多细节,但似乎很重要:
我实际上需要替换文本中的所有空格,但不是那些属于标签的空格,无论是 < ... >
标签还是 <...>
标签。
您可以使用
text = text.gsub(/(<.*?>|<[^>]*>)|[[:blank:]]/m) { || '_' }
我建议使用 [[:blank:]]
而不是 \s
,因为我假设您不想替换换行符。见 Ruby demo.
上面的正则表达式匹配
(<.*?>|<[^>]*>)
- <
,任何零个或多个尽可能少的字符,以及 >
或 <
,然后 [=] 以外的零个或多个字符17=] 然后是 >
|
- 或
[[:blank:]]
- 任何单个水平空格(您也可以使用 [\p{Zs}\t]
来匹配任何 Unicode 水平空格)。
替换中的 { || '_' }
块表示当第 1 组匹配时,按原样返回第 1 组值,否则返回 _
作为水平空白的替换。
我正在尝试使用正则表达式来匹配除 HTML 标签之外的任何文本。我找到了“正常”HTML 代码的解决方案:
<[^>]*>(*SKIP)(*F)|[^<]+
但是,我的代码是使用 <
和 >
而不是 <
和 >
编码的,我无法为此修改上面的正则表达式上班。
例如,给定文本:
Hi <p class=\"hello\">\r\nthere, how are you\r\n</p>
我需要匹配“hi”和“there, how are you”。请注意,我还需要匹配不在标签之间的文本,在此示例中为“hi”。
更新:因为我正在使用 ruby 的 gsub,看起来我什至不能使用 *SKIP 和 *F
更新 2:我试图不涉及太多细节,但似乎很重要:
我实际上需要替换文本中的所有空格,但不是那些属于标签的空格,无论是 < ... >
标签还是 <...>
标签。
您可以使用
text = text.gsub(/(<.*?>|<[^>]*>)|[[:blank:]]/m) { || '_' }
我建议使用 [[:blank:]]
而不是 \s
,因为我假设您不想替换换行符。见 Ruby demo.
上面的正则表达式匹配
(<.*?>|<[^>]*>)
-<
,任何零个或多个尽可能少的字符,以及>
或<
,然后 [=] 以外的零个或多个字符17=] 然后是>
|
- 或[[:blank:]]
- 任何单个水平空格(您也可以使用[\p{Zs}\t]
来匹配任何 Unicode 水平空格)。
替换中的 { || '_' }
块表示当第 1 组匹配时,按原样返回第 1 组值,否则返回 _
作为水平空白的替换。