正则表达式 - 仅当另一个命名组匹配时命名组
regex - named group only if another named group matches
切换命令可以使用如下:
toggle
toggle n
toggle >hotspot y
toggle >hotspot
toggle @location>hotspot n
toggle @location>hotspot
我现在的正则表达式如下:
^toggle(?>\s(?>@(?'location'\w+))?(?>>(?'hotspot'\w+))?)?(?>\s(?'value'n|y))?$
然而,这个允许匹配以下字符串:
toggle @location
toggle @location n
我想仅当命名组“hotspot”(以“>”为前缀)匹配时才允许命名组“location”(以“@”为前缀)。
在您尝试的模式中,组 hotspot
不应该是可选的。
还有一些原子组(?>
,如果您稍微更改分组,可以选择匹配空白字符,则这些原子组不是必需的。
这部分n|y
也可以写成一个字符class[ny]
^toggle(?:\s(?:@(?'location'\w+))?>(?'hotspot'\w+))?(?:\s(?'value'[ny]))?$
说明
^
字符串开头
toggle
字面匹配
(?:
非捕获组
\s
匹配空白字符
(?:@(?'location'\w+))?
可选匹配@
,在组中捕获location
1+ 字字符
>(?'hotspot'\w+)
匹配>
,分组抓包hotspot
1+字字符
)?
关闭组并使其可选
(?:
非捕获组
\s(?'value'[ny])
匹配空白字符,在组 value
中捕获 n
或 y
)?
关闭组并使其可选
$
字符串结束
切换命令可以使用如下:
toggle
toggle n
toggle >hotspot y
toggle >hotspot
toggle @location>hotspot n
toggle @location>hotspot
我现在的正则表达式如下:
^toggle(?>\s(?>@(?'location'\w+))?(?>>(?'hotspot'\w+))?)?(?>\s(?'value'n|y))?$
然而,这个允许匹配以下字符串:
toggle @location
toggle @location n
我想仅当命名组“hotspot”(以“>”为前缀)匹配时才允许命名组“location”(以“@”为前缀)。
在您尝试的模式中,组 hotspot
不应该是可选的。
还有一些原子组(?>
,如果您稍微更改分组,可以选择匹配空白字符,则这些原子组不是必需的。
这部分n|y
也可以写成一个字符class[ny]
^toggle(?:\s(?:@(?'location'\w+))?>(?'hotspot'\w+))?(?:\s(?'value'[ny]))?$
说明
^
字符串开头toggle
字面匹配(?:
非捕获组\s
匹配空白字符(?:@(?'location'\w+))?
可选匹配@
,在组中捕获location
1+ 字字符>(?'hotspot'\w+)
匹配>
,分组抓包hotspot
1+字字符
)?
关闭组并使其可选(?:
非捕获组\s(?'value'[ny])
匹配空白字符,在组value
中捕获n
或y
)?
关闭组并使其可选$
字符串结束