带环视的条件正则表达式

Conditional Regex with lookarounds

我正在尝试编写以 key/value 对格式捕获数据值的正则表达式。不幸的是,我无法准确找到我需要的东西,但我怀疑这与有条件的环顾四周有关。我也不确定这是最好的解决方案。

key/value 对将如下所示:

我将表达式 \bsource(::|=)([0-9a-zA-Z_\-\*\"\:\.\/]+) 的字符列入白名单。如果值中有空格,那么第一个词会被捕获,之后什么也没有,或者如果我将空格列入白名单,那么我会捕获比需要更多的词。匹配值同时避免周围的双引号也很棒!

数据样本:

... source="source name with quotes - special characters also" ...

... source=source_name_without_quotes_with_special-characters* ...

... source="source_name_with_quotes_no_spaces-*" ...

任何帮助或指导都将非常有帮助,在此先感谢!

~张量

一个条件表达式看起来像这样

\bsource(?::|=)(")?(?(1)(?P<value1>[^"]+)"|(?P<value2>\S+))

参见a demo on regex101.com


但你在这里并不真正需要它,使用一个简单的替代:

\bsource(?::|=)(?:"(?P<value1>[^"]+)"|(?P<value2>\S+))

another demo on regex101.com


您甚至可以使用 分支重置 用于相同名称的组:

\bsource(?::|=)(?|"(?P<value>[^"]+)"|(?P<value>\S+))

参见 the last demo on regex101.com