带环视的条件正则表达式
Conditional Regex with lookarounds
我正在尝试编写以 key/value 对格式捕获数据值的正则表达式。不幸的是,我无法准确找到我需要的东西,但我怀疑这与有条件的环顾四周有关。我也不确定这是最好的解决方案。
key/value 对将如下所示:
... source=<value> ...
-- 没有quotes/spaces
... source="<value with spaces>" ...
-- 带空格的引号
... source="<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+))
但你在这里并不真正需要它,使用一个简单的替代:
\bsource(?::|=)(?:"(?P<value1>[^"]+)"|(?P<value2>\S+))
见another demo on regex101.com。
您甚至可以使用 分支重置 用于相同名称的组:
\bsource(?::|=)(?|"(?P<value>[^"]+)"|(?P<value>\S+))
我正在尝试编写以 key/value 对格式捕获数据值的正则表达式。不幸的是,我无法准确找到我需要的东西,但我怀疑这与有条件的环顾四周有关。我也不确定这是最好的解决方案。
key/value 对将如下所示:
... source=<value> ...
-- 没有quotes/spaces... source="<value with spaces>" ...
-- 带空格的引号... source="<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+))
但你在这里并不真正需要它,使用一个简单的替代:
\bsource(?::|=)(?:"(?P<value1>[^"]+)"|(?P<value2>\S+))
见another demo on regex101.com。
您甚至可以使用 分支重置 用于相同名称的组:
\bsource(?::|=)(?|"(?P<value>[^"]+)"|(?P<value>\S+))