使用正则表达式在Ruby中查找精确的模式匹配

时间:2011-07-15 23:02:39

标签: ruby regex

我如何使用正则表达式测试完全匹配。

"car".match(/[ca]+/)返回true。

如果正则表达式模式不包含“r”,我将如何使上述语句返回false?包含“c”和“a”以外的任何字符的任何字符串都应返回false。

“acacaccc”应该返回true

“acacacxcc”应该返回false

5 个答案:

答案 0 :(得分:9)

添加一些锚点:

/^[ca]+$/

答案 1 :(得分:7)

你只需要锚点。

"car".match(/^[ca]+$/)

这将强制整个字符串由“c”或“a”组成,因为“^”和“$”表示字符串的“开始”和“结束”。如果没有它们,只要匹配字符串的任何部分,正则表达式就会成功。

答案 2 :(得分:3)

改变你的逻辑并寻找坏事:

string.match(/[^ca]/)
string.index(/[^ca]/)

如果上述任何一个都是非零的,那么你的字符串就会很糟糕。如果你只是想测试而不关心它匹配的地方那么:

if string.index(/[^ca]/).nil?
    # You have a good string
else
    # You have a bad string

例如:

>> "car".index(/[^ca]/).nil?
=> false
>> "caaaacaac".index(/[^ca]/).nil?
=> true

答案 3 :(得分:1)

试试这个

"car".match /^(a|c)+$/

答案 4 :(得分:1)

试试这个:

"car".match(/^(?:c|a)$/)