在Ruby中组合regexp

在Ruby中组合regexp,ruby,regex,Ruby,Regex,我有这样的密码 (str =~ /regexp1/) && (str !~ /regexp2/) ? "aa" : "bb" 有没有一种方法可以将两个regexp合并到一个检查中以获得较短的代码?您可以使用负前瞻来实现这一点 (?!.*regexp2)regexp1 需要使用*,以确保字符串中的任何位置都不存在regexp2。例如 regexp2=bb和regexp1=cc。这里不需要*,因为它很简单。但如果 这里需要使用regexp2=bb和regexp1=ccbbaa.*

我有这样的密码

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

有没有一种方法可以将两个regexp合并到一个检查中以获得较短的代码?

您可以使用负前瞻来实现这一点

(?!.*regexp2)regexp1
需要使用*,以确保字符串中的任何位置都不存在regexp2。例如

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


这里需要使用regexp2=bb和regexp1=ccbbaa.*来确保bb在字符串中的任何位置都不存在。

vks的regex有一定的道理,但并不完全正确。这样做:

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

您可以使用以下方法使其稍微短一些:

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

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

你能解释一下我们为什么需要。*吗?它在几种情况下都不起作用@VictorRonin你能举个例子吗?等等,你的正则表达式在正则表达式1匹配的点或之后禁止正则表达式2,但它是否禁止在该点之前出现的正则表达式2?@sawa可以很容易地用锚来完成。但我不确定OP是否需要that@vks-不是真的:regexp2regexp1[/?!regexp2regexp1/]=>regexp1pg,这并不能解决问题。问题不在于是否应该使用令人费解的正则表达式,如果这是组合两个正则表达式所需要的。我怀疑任何读到这篇文章的人都不会肯定地回答这个问题。也许有一些有用的东西需要学习,但是,通过研究提供的解决方案,可能在其他情况下有应用价值的金块。@Cary我不同意,我认为你是在鼓励编写糟糕的代码。