使用正则表达式进行基于条件的搜索

时间:2014-09-09 13:35:43

标签: regex

我尝试搜索与默认情况下特定版本的linux相关的元素列表,但从不会出现不同的风格。

例如:我有3个要搜索的项目:

driver.rhel7.x86_64.rpm
driver.rhel6.x86_64.rpm
driver.linux.x86_64.rpm
driver.xxxxx.x86_64.rpm

条件是:如果你发现rhel6接受它,如果linux接受它和其他一切,但从不rhel7。

我正在尝试类似以下内容的正则表达式,但它不起作用。

RHEL(= 6?)|?.x86_64.rpm

但这也与rhel7相匹配。

3 个答案:

答案 0 :(得分:2)

根据评论编辑回答:

^(?:[^r]|r(?!hel7))*\.x86_64\.rpm

Regex101

查看用例我猜你想要任何以文本结尾的驱动程序,表示它们适用于rhel6或linux,64位架构和rpm包。

编辑 根据我和其他人的答案中的评论,我得出你想要正则表达式如果在之前(或之后)找到linux匹配项,则匹配rhel6变体?这是你的正则表达式之外的逻辑。正则表达式不知道之前(或将来)的匹配。所以你应该匹配任何不是rhel7的东西,并遍历驱动程序名称直到linux-flavor部分。对于每个驱动程序名称,您会看到是否存在rhel6变体,如果存在,请执行此操作,如果不存在,则搜索Linux变体。

我不知道你正在使用什么环境,但据推测,Bash应该可以做那样的事情吗?或Python或其他东西。这是" Regex是您的工具,而不是您的解决方案。" :)

答案 1 :(得分:1)

如果rhel必须是rhel6,否则任何东西:

driver\.(?!rhel([^6]|\d\d)).*?\.x86_64\.rpm

请参阅demo

答案 2 :(得分:0)

driver\.(?!rhel7).*

试试这个。看看演示。

http://regex101.com/r/nG1gU7/21