正则表达式删除字符结束xml

时间:2018-11-16 21:46:55

标签: regex

我正在尝试使用正则表达式来消除多余的xml

<?xml version="1.0"?>
<node>
<B/>
</node>string1
string2

https://regex101.com/r/US1eCQ/1/

但是当我放置一个折线时,应该进行比赛,而不应该这样做。如果有换行符或空格不匹配,我希望在xml的结束标记后将所有内容修复。

thx!

1 个答案:

答案 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)
 )