在Ruby中结合regexp

时间:2014-10-30 04:27:40

标签: ruby regex

我有类似的代码

(str =~ /regexp1/) && (str !~ /regexp2/) ? "aa" : "bb"

有没有办法在一次检查中合并两个正则表达式以获得更短的代码?

3 个答案:

答案 0 :(得分:3)

vks的正则表达式有点重要,但并不完全正确。这样做:

/\A(?!.*#{regexp2}).*#{regexp1}/

答案 1 :(得分:1)

你可以用以下内容缩短它:

str[/regexp1/] && !str[/regexp2/] ? "aa" : "bb"

我在这里看到的其他解决方案对于需要阅读代码的人来说是一个不必要的噩梦。避免它们。

答案 2 :(得分:0)

你可以使用否定前瞻来做到这一点。

(?!.*regexp2)regexp1
需要

.*以确保字符串中的任何位置都不存在regexp2。对于前。

regexp2="bb"regexp1 ="cc"。在这里,不需要.*,因为它很简单。但是如果

regexp2="bb"regexp1="ccbbaa"此处需要.*以确保字符串中的bb不存在。