我有一个正则表达式:
find "'directory' | wc -l"
我的输入字符串:
^\/admin\/(?!(e06772ed-7575-4cd4-8cc6-e99bb49498c5)).*$
根据我的理解,否定前瞻应检查群组/admin/e06772ed-7575-4cd4-8cc6-e99bb49498c5
是否匹配,或者我是否错误?
由于输入字符串具有组匹配,为什么否定前瞻不起作用?我的意思是我希望我的正则表达式(e06772ed-7575-4cd4-8cc6-e99bb49498c5)
匹配输入字符串e06772ed-7575-4cd4-8cc6-e99bb49498c5
。
删除负前瞻使得此正则表达式正常工作。
答案 0 :(得分:1)
此问题的搭便车信息是:环视匹配位置,而不是字符串。
(?!e06772ed-7575-4cd4-8cc6-e99bb49498c5)
将匹配任何位置,即不,然后是e06772ed-7575-4cd4-8cc6-e99bb49498c5
。
这意味着:
^\/admin\/(?!(e06772ed-7575-4cd4-8cc6-e99bb49498c5)).*$
将匹配:
/admin/abc
甚至:
/admin/e99bb49498c5
但不是:
/admin/e06772ed-7575-4cd4-8cc6-e99bb49498c5/daffdakjf;adjk;af
这正是解释为什么每当你摆脱?!
时都有匹配的原因。字符串匹配完全。
接下来,您可能会丢失前瞻中的括号,但它们没有通常的分组功能。