【发布时间】:2011-07-15 23:02:39
【问题描述】:
我将如何使用正则表达式测试完全匹配。
"car".match(/[ca]+/) 返回 true。
由于正则表达式模式不包含“r”,我如何让上述语句返回 false?任何包含“c”和“a”以外的字符的字符串都应该返回 false。
“acacaccc”应该返回true
“acacacxcc”应该返回false
【问题讨论】:
我将如何使用正则表达式测试完全匹配。
"car".match(/[ca]+/) 返回 true。
由于正则表达式模式不包含“r”,我如何让上述语句返回 false?任何包含“c”和“a”以外的字符的字符串都应该返回 false。
“acacaccc”应该返回true
“acacacxcc”应该返回false
【问题讨论】:
为其添加一些锚点:
/^[ca]+$/
【讨论】:
"c\nX".match(/^[ca]+$/).
你只需要锚点。
"car".match(/^[ca]+$/)
这将强制整个字符串由“c”或“a”组成,因为“^”和“$”表示字符串的“开始”和“结束”。没有它们,只要匹配字符串的任何部分,正则表达式就会成功。
【讨论】:
"caca\nrabbits" 等字符串上中断。正确的锚点是 \A 和 \Z
\z,而不是\Z,否则你会错过"c\n"。
^ 和$ 表示行 的开始和结束,而不是字符串。请注意,这在许多语言中是不同的。
扭转你的逻辑,寻找不好的东西:
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
【讨论】:
试试这个
"car".match /^(a|c)+$/
【讨论】:
试试这个:
"car".match(/^(?:c|a)$/)
【讨论】: