Regex 正则表达式捕获组,具有可选属性';不匹配
我想在下面的字符串中匹配有效的Regex 正则表达式捕获组,具有可选属性';不匹配,regex,capturing-group,Regex,Capturing Group,我想在下面的字符串中匹配有效的:对 有效的是任何后跟:的非空白字符 有效的可以包含在[]中,也可以是不带空格的字符串 key1:value1键#2:@value#2 nyet键3:[@value#3,value4]key4:[value5]:条 基本上,我想匹配所有东西,除了nyet和:bar 我提出了以下正则表达式\S+:(\S+\[^]+\]),但它似乎与key3:[@value\35; 3,value4]中的表达式不匹配。在捕获组中,第二个可选的\[[^]]+\]应该匹配这个表达式,所以
:
对
有效的
是任何后跟:
的非空白字符 有效的
可以包含在[]
中,也可以是不带空格的字符串
key1:value1键#2:@value#2 nyet键3:[@value#3,value4]key4:[value5]:条
基本上,我想匹配所有东西,除了nyet
和:bar
我提出了以下正则表达式\S+:(\S+\[^]+\])
,但它似乎与key3:[@value\35; 3,value4]
中的表达式不匹配。在捕获组中,第二个可选的\[[^]]+\]
应该匹配这个表达式,所以我不理解为什么它不匹配
下面的正则表达式可以工作:\S+:([^([)]+\[^\]]+\])
,但感觉不优雅
问题:
\S+:(\S+\[[^]]+\])
不起作用\S+:(\[[^]]+\]\124;\ S+
,但在这种情况下,is也将与[]
匹配
您还可以使用否定字符类来匹配第一部分中的:
(\[[^]]+]\s+
对于组,您可以使用替换并检查值是否存在组2或组3
([^\s:]+):(?:\[([^][]+)]|(\S+))
模式匹配:
捕获组1,匹配除空白字符以外的任何字符或([^\s:]+)
:
匹配:
:
非捕获组(?:
匹配\[([^][]+)]
在第2组捕获[
和[
]之外的任何字符,并匹配结束
]
或|
捕获组3中的1+个非空白字符(\S+)
关闭非捕获组)
如果支持,则可以检查组2是否捕获了
[
。如果捕获了,则可以捕获组3中括号以外的任何字符
然后,所需的值位于组1和组3中
([^\s:]+):(?:(\[)(?=[^][]*]))?((?(2)[^][]+|\S+))\]?
在模式中,您可以\S+:(\[[^]+\]\S+
,但在这种情况下,is也将与[]
匹配
您还可以使用否定字符类来匹配第一部分中的:
(\[[^]]+]\s+
对于组,您可以使用替换并检查值是否存在组2或组3
([^\s:]+):(?:\[([^][]+)]|(\S+))
模式匹配:
捕获组1,匹配除空白字符以外的任何字符或([^\s:]+)
:
匹配:
:
非捕获组(?:
匹配\[([^][]+)]
在第2组捕获[
和[
]之外的任何字符,并匹配结束
]
或|
捕获组3中的1+个非空白字符(\S+)
关闭非捕获组)
如果支持,则可以检查组2是否捕获了
[
。如果捕获了,则可以捕获组3中括号以外的任何字符
然后,所需的值位于组1和组3中
([^\s:]+):(?:(\[)(?=[^][]*]))?((?(2)[^][]+|\S+))\]?
:\S
的优先级高于:\[
-1+非空格字符和冒号\S+:
-非捕获组启动(用于或)(?:
-\[^\]*\]
模式[…]
-逻辑或|
-1+非空格字符\S+
-非捕获组结束)
:\S
的优先级高于:\[
-1+非空格字符和冒号\S+:
-非捕获组启动(用于或)(?:
-\[^\]*\]
模式[…]
-逻辑或|
-1+非空格字符\S+
-非捕获组结束)
([^\s:]+):(?\[([^][*])(\s+)
会适合您的场景,但它需要PCRE/Boost。请参见。您的第一个正则表达式不起作用,因为将\s+
替代项放在第一位。它总是“赢”,因为[
也是非空白。可能,([^\s:]+):(?\[^\s:]+]):(?\[^-[^]]*]):(([^-[-[]]]*])。\s+)
将适合您的场景,但需要PCRE/Boost。请参阅。您的第一个正则表达式不起作用,因为将\S+
备选方案放在第一位。自[
也是非空白。@Frode Akselsen:这符合你的需要吗?有问题吗?没有,非常感谢你的帮助!@Frode Akselsen:这符合你的需要吗?有问题吗?没有,非常感谢你的帮助!