我正在尝试使用正则表达式来消除多余的xml
<?xml version="1.0"?>
<node>
<B/>
</node>string1
string2
https://regex101.com/r/US1eCQ/1/
但是当我放置一个折线时,应该进行比赛,而不应该这样做。如果有换行符或空格不匹配,我希望在xml的结束标记后将所有内容修复。
thx!
答案 0 :(得分:0)
原始的PCRE正则表达式是
(?:[\S\s]*(?&tag)\K)[\S\s]*(?(DEFINE)(?<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]*?))>)))
https://regex101.com/r/t9sydw/1
用空字符串替换以进行清理。
可以针对Java,JS等进行调整...
易用的版本:
(?:
[\S\s]* (?&tag)
\K
)
[\S\s]*
(?(DEFINE)
(?<tag> # (1 start)
(?>
<
(?:
(?:
/?
[\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]*?
)
)
>
)
) # (1 end)
)