Regex 在正则表达式中提取测试字符串是否需要负前瞻?
我的目标是在正则表达式的帮助下,从下面的字符串中删除不以“TEST”开头的标记Regex 在正则表达式中提取测试字符串是否需要负前瞻?,regex,apache,cookies,negative-lookahead,Regex,Apache,Cookies,Negative Lookahead,我的目标是在正则表达式的帮助下,从下面的字符串中删除不以“TEST”开头的标记 TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2 基于在线阅读,我似乎需要创建一个正则表达式来匹配我想要的,然后对它使用负前瞻。然而,我无法想出一个 输入字符串: TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2 匹配字符串: TESTA=abc; TES
TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2
基于在线阅读,我似乎需要创建一个正则表达式来匹配我想要的,然后对它使用负前瞻。然而,我无法想出一个
- 输入字符串:
TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2
- 匹配字符串:
TESTA=abc; TESTB=ghi; TESTC=jkl;
[^=;]+(?<!TEST.)=[^;]+(?:$|;)
[^=;]+(?
它的作用是什么?
[^=;]+
匹配到第一个=
或;
(?反向查找。检查匹配的字符串前面是否有测试。
=[^;]+
如果查找成功,则匹配到下一个;
使用非贪婪量词
您不需要像零宽度断言或负向前看或向后看这样复杂的东西。您只需要在支持它的引擎中使用一个非贪婪的量词,如*?
。例如,在Bash提示符下,仅使用egrep:
$ echo 'TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2' |
egrep -o 'TEST.*?;' | xargs
TESTA=abc; TESTB=ghi; TESTC=jkl;
您可以在Ruby、Python或Perl中执行类似操作。例如,使用Ruby:
str = 'TESTA=abc; VAL2=def; TESTB=ghi; TESTC=jkl; VAL2=bla1; VAL3=bla2'
str.scan(/TEST.*?;/).join " "
#=> "TESTA=abc; TESTB=ghi; TESTC=jkl;"
您应该始终发布您尝试过的内容,以便其他人可以指出您遗漏了什么以及您如何改进代码。bla2是否应该在之后使用分号?这将匹配其余的值…语言是什么?如果没有分号,问题将非常不清楚。使用更多信息修改了我的问题。正则表达式需要在Apache中使用配置文件