首页 > 解决方案 > 正则表达式

问题描述

我需要一个正则表达式来选择不包含的元素@href

<test  abc="xyz_CHCFGRc/abc_CHmnop" href="sdddzus.xml">text</test>
<test  abc="abc_abc>text23</test>
<test  abc="123_ABCc/abc_CHmnoph">text42</test>

我写的正则表达式:

<test\s+abc.[^href]*>.*

这个表达式的问题是 href 被认为是一个单独的字母,如果 abc 包含这些字母中的任何一个,它就不会被选中。

结果应该是:

<test  abc="abc_abc>text23</test>
<test  abc="123_ABCc/abc_CHmnoph">text42</test>

但就我而言,结果是

<test  abc="abc_abc>text23</test> 

提前致谢

标签: regexxmlxslt

解决方案


首先,您应该为此使用 XML 解析器:为什么用正则表达式解析 XML 是个坏主意?. 但是,如果您必须使用常规表达式,则解决方案如下:

尝试<test(?!.+href).+

说明:

<test<test-从字面上匹配

(?!.+href)- 否定前瞻:断言后面的内容不是:.+- 一个或多个任意字符和href,即断言后面的内容不包含href单词

.+- 匹配 noe 或更多任何字符

演示

您关于否定字符类的想法是错误的:[^href]否定h, r,e并且f单独地,它不会href作为一个词否定。


推荐阅读