有可能在正则expression式中做string否定吗? 我需要匹配所有不包含string".."的string。 我知道你可以使用^[^\.]*$匹配所有不包含"."string"." 但我需要匹配多个字符。 我知道我可以简单地匹配一个包含".."的string,然后否定匹配的返回值,以达到相同的结果,但我只是想知道是否有可能。
在我的主目录中,我有一个包含Drupal平台的文件夹drupal-6.14。 从这个目录中我使用下面的命令: find drupal-6.14 -type f -iname '*' | grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*' | xargs tar -czf drupal-6.14.tar.gz 这个命令的作用是gzips文件夹Drupal-6.14 ,不包括drupal-6.14 / sites / sites / all和sites / default所包含的所有子文件夹。 我的问题是正则expression式: grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*' 该expression式的作品排除所有我想排除的文件夹,但我不明白为什么。 这是使用正则expression式的常见任务 匹配所有string,除了不包含子模式x的string。 换句话说,否定子模式。 我认为,我明白,解决这些问题的总体策略是使用负向预测,但是我从来没有理解到一个令人满意的程度如何正面和负面看(前/后)的工作。 多年来,我已经阅读了许多网站。 PHP和Python的正则expression式手册,其他页面如http://www.regular-expressions.info/lookaround.html等等,但我从来没有真正理解它们。 有人可以解释,这是如何工作,也许提供一些类似的例子,会做类似的事情? – 更新一: 关于Andomar的回应:双重否定的前瞻可以更简洁地expression为一个积极的前瞻性陈述: 即是: 'drupal-6.14/(?!sites(?!/all|/default)).*' 相当于: 'drupal-6.14/(?=sites(?:/all|/default)).*' ??? – 更新二: 根据@andomar和@alan摩尔 – 你不能交换双向负向lookahead积极lookahead。