1

我想匹配一个 xml 元素并为一个可选属性创建一个组。如果该属性不存在,那么我将执行一些其他操作。例如我有

<customer display="no">

我想匹配客户元素,但显示属性可能不存在。在代码中,我将检查该捕获组是否为空,如果是,则执行一些自定义逻辑。

所以我的正则表达式是

<customer.*(display="yes|no").*?>

当它具有属性时,它与元素匹配,但是我如何使组成为可选的,以便我可以检查是否包含该元素?

4

2 回答 2

1

您可以在组后面放一个问号,就像正则表达式的任何其他可选组件一样。如果这样做,您还必须使第一个.*懒惰(通过添加?),否则它将消耗整行。

所以你应该有这样的东西:

<customer.*?(display="yes|no")?.*?>

另请注意,它(display="yes|no")可能与您想要的不匹配:它匹配display="yesno" display="yes"匹配或display="no". 我怀疑你想要(display="(?:yes|no)")

于 2012-10-08T04:52:53.500 回答
0

试试这个正则表达式:

<customer.*?(display="(?:yes|no)").*?>

解释:

?

匹配前一个元素零次或一次。

*?

匹配前一个元素零次或多次,但尽可能少。

(?: subexpression)

定义一个非捕获组。

于 2012-10-08T04:49:32.550 回答