我想匹配一个xml元素并为可选属性创建一个组。如果该属性不存在,那么我将执行一些其他操作。例如我有
<customer display="no">
我想匹配customer元素,但display属性可能不存在。在代码中,我将检查该捕获组是否为空,如果是,则执行一些自定义逻辑。
所以正则表达式是
<customer.*(display="yes|no").*?>
当元素具有属性时匹配元素ok但是如何使组可选,以便我可以检查元素是否包含在内?
答案 0 :(得分:1)
您可以在组后添加问号,与正则表达式的任何其他可选组件相同。如果你这样做,你还必须使第一个.*
懒惰(通过添加?
),否则它将消耗整行。
所以你应该有这样的东西:
<customer.*?(display="yes|no")?.*?>
另请注意,(display="yes|no")
可能与您的要求不符:它与display="yes
或no"
匹配 display="yes"
或{ {1}}。我怀疑你想要display="no"
。
答案 1 :(得分:0)
试试这个正则表达式:
<customer.*?(display="(?:yes|no)").*?>
解释
的
?
强> 的匹配前一个元素零次或一次。
的
*?
强> 的匹配前一个元素零次或多次,但次数尽可能少。
的
(?: subexpression)
强> 的定义非捕获组。