否定正则表达式中的反向引用
Negating a backreference in regex
我写过这样的正则表达式:
(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:[^\k<quote>]|(?<=\)\k<quote>)+\k<quote>))
但由于 [^] 内的反向引用,它不起作用。我在 this thread 上寻找解决方案并写道:
(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:(?!\k<quote>).|(?<=\)\k<quote>)+\k<quote>))
但是还是不行。
我做错了什么?
我想从以下字符串中提取所有具有值的键:
arg="value" arg='value' arg=`value` arg="value 'value'" arg='value \'value\' value' arg="value \"value\" value" arg=`value \`value\ value`
您可以使用正确的 :
修复正则表达式
(?<arg> # Start arg group
(?<key>\w+) # key group: 1+ word chars
= # =
(?<quote>['"`]?) # quote group: an optional " ' or `
(?<value>(?:(?!\k<quote>)[^\])*(?:\[\s\S](?:(?!\k<quote>)[^\])*)*) # value group: any 0+ chars other than quote char with escaped quote chars allowed
\k<quote> # quote group value
) # end of arg group
参见regex demo。
一行:
(?<arg>(?<key>\w+)=(?<quote>['"`]?)(?<value>(?:(?!\k<quote>)[^\])*(?:\[\s\S](?:(?!\k<quote>)[^\])*)*)\k<quote>)
我写过这样的正则表达式:
(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:[^\k<quote>]|(?<=\)\k<quote>)+\k<quote>))
但由于 [^] 内的反向引用,它不起作用。我在 this thread 上寻找解决方案并写道:
(?<arg>(?<key>\w+)+=(?<quote>["'`])(?<value>(?:(?!\k<quote>).|(?<=\)\k<quote>)+\k<quote>))
但是还是不行。
我做错了什么?
我想从以下字符串中提取所有具有值的键:
arg="value" arg='value' arg=`value` arg="value 'value'" arg='value \'value\' value' arg="value \"value\" value" arg=`value \`value\ value`
您可以使用正确的
(?<arg> # Start arg group
(?<key>\w+) # key group: 1+ word chars
= # =
(?<quote>['"`]?) # quote group: an optional " ' or `
(?<value>(?:(?!\k<quote>)[^\])*(?:\[\s\S](?:(?!\k<quote>)[^\])*)*) # value group: any 0+ chars other than quote char with escaped quote chars allowed
\k<quote> # quote group value
) # end of arg group
参见regex demo。
一行:
(?<arg>(?<key>\w+)=(?<quote>['"`]?)(?<value>(?:(?!\k<quote>)[^\])*(?:\[\s\S](?:(?!\k<quote>)[^\])*)*)\k<quote>)