Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 匹配可选的捕获组_.net_Regex - Fatal编程技术网

.net 匹配可选的捕获组

.net 匹配可选的捕获组,.net,regex,.net,Regex,我想匹配一个xml元素并为可选属性创建一个组。如果属性不存在,那么我将执行其他一些操作。比如我有 <customer display="no"> 我想匹配customer元素,但display属性可能不存在。在代码中,我将检查捕获组是否为空,如果为空,则执行一些自定义逻辑 所以我的正则表达式是 <customer.*(display="yes|no").*?> 当元素具有属性时,它与元素匹配是ok的,但如何使组成为可选的,以便检查元素是否包含在其中?尝试此正则

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

<customer display="no">

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

所以我的正则表达式是

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

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

尝试此正则表达式:

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

说明:

与上一个元素零次或一次匹配

*?

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

(?:子表达式)

定义非捕获组

试试这个正则表达式:

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

说明:

与上一个元素零次或一次匹配

*?

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

(?:子表达式)

定义非捕获组


您可以在组后面加一个问号,这与正则表达式的任何其他可选组件相同。如果执行此操作,还必须使第一个
*
变懒(通过添加
),否则它将占用整行

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

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


还要注意的是
(display=“yes | no”)
可能与您想要的不匹配:它匹配
display=“yes
no”
而不是
display=“yes”
display=“no”
。我怀疑您想要
(display=“(?:yes | no)”)

您只需在组后面加一个问号,与正则表达式的任何其他可选组件相同。如果执行此操作,还必须使第一个
*
变懒(通过添加
),否则它将占用整行

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

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


还要注意的是
(display=“yes | no”)
可能与您想要的不匹配:它匹配
display=“yes
no”
而不是
display=“yes”
display=“no”
。我怀疑你想要
(display=“(?:yes | no)”)

我试过了,但它让匹配变得贪婪,但我刚刚发现这是因为第一次任何字符匹配都是贪婪的。我试过了,但这让比赛变得贪婪,但我发现这是因为第一次任何角色比赛都是贪婪的。是的,我刚刚发现问题是第一个。*贪婪,应该是。*?是的,我刚刚发现问题是第一个。*贪婪,应该是。*?不要使用正则表达式进行XML解析!!!根据您使用的.NET标记。在.NET中,我们有XmlReader、XmlDocument和XDocument——处理XML的标准类。不要使用正则表达式进行XML解析!!!根据您使用的.NET标记。在.NET中,我们有XmlReader、XmlDocument和XDocument——处理XML的标准类。