Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Regex Group - Fatal编程技术网

.net正则表达式可选命名组

.net正则表达式可选命名组,.net,regex,regex-group,.net,Regex,Regex Group,我想解析如下所示的输入字符串: 客户机/02004C4F40/box/注册 客户端/02004C4F40/box/data/flow 使用.NET正则表达式库客户端和框始终相同,但其余部分可能不同。 我想到的是这个正则表达式: ^client/(?。+)/box/(?。+)(/(?。+)?) 我想要的是将注册和数据匹配到类型组中,流进入可选组值。 应该是这样的: Groupname | Input 1 | Input 2 ------------------------------

我想解析如下所示的输入字符串:

客户机/02004C4F40/box/注册
客户端/02004C4F40/box/data/flow

使用.NET正则表达式库<代码>客户端和
始终相同,但其余部分可能不同。 我想到的是这个正则表达式:

^client/(?。+)/box/(?。+)(/(?。+)?)

我想要的是将
注册
数据
匹配到
类型
组中,
进入可选组
。 应该是这样的:

Groupname | Input 1 | Input 2 --------------------------------------- id | 02004C4F4F50 | 02004C4F4F50 type | registration | data value | {empty} | flow 组名|输入1 |输入2 --------------------------------------- id | 02004C4F40 | 02004C4F40 类型|注册|数据 值|{empty}|流 但在我当前的解决方案中,可选组(
)从未匹配。
可能有人有一个提示。

您可以使用
[^/]+
模式(除
/
字符以外的任何1+字符)匹配子部分,并将编号的捕获组而不是
命名的捕获组设置为可选,即
(/(?+)
=
(?:/(?+)?)?
(此外,您可以将捕获组转换为非捕获,或使用使所有捕获组都表现为非捕获)

你可以用

^client/(?<id>[^/]+)/box/(?<type>[^/]+)(?:/(?<value>[^/]+))?
^client/(?[^/]+)/box/(?[^/]+)(?:/(?[^/]+)?


使用此
^client/([A-Z\d]+)/box/(.+)
并用
|
分割最后一组
数据/流
Demo@AnkushRathi如果OP可以分割,OP就不会要求正则表达式解决方案。请参见.NET正则表达式库。@WiktorStribiżew这将
注册
放入
组。但我明白你的意思了!@WiktorStribiż是的,我明白了,我的坏蛋你是说你需要什么?