我有一个逗号分隔的key=value对字符串,如下所示:
foo=1,foo=1,bar=2在这个字符串中,我希望捕获第一个foo的值,但前提是它紧跟在bar=2之后。
示例:
1:
baz=0,foo=1,bar=2,foo=3,bar=4我的当前解决方案使用了一个经过调整的贪婪令牌,但这迫使我复制正则表达式的foo=[^,]*,部分:
^(?:(?!foo=[^,]*,).)*foo=([^,]*),bar=2(?:,|$)有没有办法做到这一点,而不必重复这么大一部分的正则表达式?
发布于 2018-10-28 21:14:19
用回溯控制动词很容易
(?<![^,])foo=([^,]*)(*COMMIT),bar=2(?![^,])我们匹配一个没有逗号字符的位置(即字符串的开始或紧跟在,之后),然后是foo=,后面是0或更多的非逗号字符(我们捕获这些字符)。这是foo=...部分。
然后,我们提交找到的第一个匹配,并要求一个,bar=2匹配,而不是一个非逗号字符(即,或字符串的末尾)。
https://stackoverflow.com/questions/53035860
复制相似问题