3 回答
TA贡献1847条经验 获得超11个赞
否定的前瞻表示,在此位置,以下正则表达式无法匹配。
让我们举一个简化的例子:
a(?!b(?!c))
a Match: (?!b) succeeds
ac Match: (?!b) succeeds
ab No match: (?!b(?!c)) fails
abe No match: (?!b(?!c)) fails
abc Match: (?!b(?!c)) succeeds
最后一个例子是双重否定:它允许b后面跟一个c。嵌套的负前瞻变为正前瞻:c应该存在。
在每个示例中,仅a匹配。前瞻仅是一个条件,不会添加到匹配的文本中。
TA贡献1809条经验 获得超8个赞
环顾四周可以嵌套。
所以这个正则表达式匹配“Drupal的6.14 /”是不是后面是“地王” 不跟着“/ all”或“/默认”。
令人困惑?使用不同的词,我们可以说它与“ drupal-6.14 /”匹配,然后不跟“ sites”,除非再跟“ / all”或“ / default”
TA贡献1802条经验 获得超4个赞
如果您这样修改正则表达式:
drupal-6.14/(?=sites(?!/all|/default)).*
^^
...然后,它将匹配所有包含的内容drupal-6.14/,sites然后是或以外的其他 所有内容。例如:/all/default
drupal-6.14/sites/foo
drupal-6.14/sites/bar
drupal-6.14/sitesfoo42
drupal-6.14/sitesall
更改?=为?!匹配您的原始正则表达式将简单地抵消那些匹配:
drupal-6.14/(?!sites(?!/all|/default)).*
^^
所以,这只是意味着drupal-6.14/现在不能被跟随sites,随后以外的任何 /all或/default。因此,现在,这些输入将满足正则表达式:
drupal-6.14/sites/all
drupal-6.14/sites/default
drupal-6.14/sites/all42
但是,从其他一些答案(可能还有您的问题)中可能看不出来的是,您的正则表达式也将允许其他输入,drupal-6.14/后面紧跟其他内容sites。例如:
drupal-6.14/foo
drupal-6.14/xsites
结论:因此,您的正则表达式基本上说要包括其名称以或以外的其他子目录开头的所有子目录。drupal-6.14 sitesalldefault
- 3 回答
- 0 关注
- 555 浏览
添加回答
举报