这是我的RegEx,与所有HTMl标签匹配。 https://regex101.com/r/bDHD9z/3
<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>
我想创建相反的一个,它匹配HTML标记以外的所有内容。此正则表达式应与内部匹配并链接以下文本:
<span class="className" id='ID' name=name>inside</span>
<a href="" title="displays >">link</a>
我尝试使用负前瞻https://regex101.com/r/bDHD9z/4并没有达到我的预期。
某些人建议的HTML解析器是不可能的,因为我需要使用Regex匹配其他条件
答案 0 :(得分:-1)
您在这里( 最快版本 )
([^<]*)(?:<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|'[\S\s]*?'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\2\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>|<|$)+
OP示例:https://regex101.com/r/YxFqTZ/1
真实世界:https://regex101.com/r/jQDryu/1
您想要的每次都在第1组中。
在单数匹配(其中html以标签开头)中,组1将为空。
在单数匹配中,html以标记结尾,字符串的结尾将始终匹配,第1组将为空。
我建议让RegexFormat 8进行格式化
并保持这种表达。
然后可以将其格式化为代码,并附带注释。
( # (1 start), Non-tag content
[^<]*
) # (1 end)
(?:
# Tag
<
(?:
(?:
# Invisible content, end tag req'd
(?:
( # (2 start), Content tag
script
| style
| object
| embed
| applet
| noframes
| noscript
| noembed
) # (2 end)
(?:
\s+
(?>
" [\S\s]*? "
| ' [\S\s]*? '
| (?:
(?! /> )
[^>]
)?
)+
)?
\s* >
)
[\S\s]*? </ \2 \s* # Closing content tag
(?= > )
)
| (?: /? [\w:]+ \s* /? )
| (?:
[\w:]+ \s+
(?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]? )+
\s* /?
)
| \? [\S\s]*? \?
| (?:
!
(?:
(?: DOCTYPE [\S\s]*? )
| (?: \[CDATA\[ [\S\s]*? \]\] )
| (?: -- [\S\s]*? -- )
| (?: ATTLIST [\S\s]*? )
| (?: ENTITY [\S\s]*? )
| (?: ELEMENT [\S\s]*? )
)
)
)
>
|
# or, <
<
|
# or, EOS
$
)+
哪个基准
Regex1: ([^<]*)(?:<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|'[\S\s]*?'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\2\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>|<|$)+
Options: < none >
Completed iterations: 50 / 50 ( x 1 )
Matches found per iteration: 2221
Elapsed Time: 0.82 s, 820.34 ms, 820341 µs
Matches per sec: 135,370
答案 1 :(得分:-1)