匹配除了特定单词之外的所有内容

时间:2011-09-23 14:18:30

标签: regex

我有这个正则表达式:

.*js/[\bpackaged\b]+\.js

目前它与下面列表中的'packaged.js'匹配:

  • JS​​ / foo.js
  • js / bar.js
  • js / suitcase.js
  • js / bootstrap.js
  • JS / packaged.js

如何将其反转以使其与“packaged.js”之外的所有其他内容匹配?

2 个答案:

答案 0 :(得分:3)

kent$  echo "    js/foo.js
    js/bar.js
    js/suitcase.js
    js/bootstrap.js
    js/packaged.js
"|grep -P '.*js/.*(?<!packaged).js'

    js/foo.js
    js/bar.js
    js/suitcase.js
    js/bootstrap.js

示例只是显示表达式,如果你真的使用grep,-v可以使它更容易。

--- 根据glibdud的评论更新 ---

注意输入中的最后5行:

 kent$  echo "    js/foo.js
    js/bar.js                                                                                                                            
    js/suitcase.js                                                                                                                       
    js/bootstrap.js                                                                                                                      
    js/packaged.js
    js/foo_packaged.js
    js/packaged_bar.js
    js/foo_packaged_bar.js
    js/_packaged.js
    js/packaged_.js"|grep -P '.*js/(.+packaged\.js|.+(?<!packaged)\.js)'   

输出:

    js/foo.js
    js/bar.js
    js/suitcase.js
    js/bootstrap.js
    js/foo_packaged.js
    js/packaged_bar.js
    js/foo_packaged_bar.js
    js/_packaged.js
    js/packaged_.js

答案 1 :(得分:0)

这样做你想要的:

.*js/(?!packaged\.js).+\.js