我正试图从我的树梢语法中的字符串中选择测量值。
我试图简单地说出'英寸'的所有不同方式,所以我的正则表达式是
in(|ches|ch|)?i
我认为上面所说的是 以'in'开头,可能有'ches'或'ch',并进行不区分大小写的搜索
我一直试图让这个在http://rubular.com/中发挥作用,但一直无法做到。
我完全不知道正则表达式应该如何工作?我尝试了各种带引号,方括号等的组合,但没有运气。
答案 0 :(得分:2)
你有太多|
个; |
表示或,因此您匹配in
后跟the empty string
或ches
或ch
或the empty string
。然后你跟我一起关注它,所以你的正则表达式将匹配ini
,inchi
或inchesi
。
您可以使用:
in(ches|ch)?
如果您不想单独匹配in
,那么您还可以使用:inch(es)?
此外,我相信你的i
意味着不区分大小写,与字符i不匹配。在任何情况下你应该把它放在rubular的第二个框中。在/
答案 1 :(得分:2)
你可以简化那么多
inch(es)?
应该够了。
答案 2 :(得分:0)
您只需在每个替换之间的中间使用管道字符:
in(ches|ch)?i
另外,你可能会把“ch”分解出来:
inch(es)?
答案 3 :(得分:0)
我建议如下,假设有效的可能性是“in”,“inch”和“inches”。
in(ch(es)?)?
答案 4 :(得分:0)
|是一个二元运算符,它需要两边的值。如果你想处理“在”,那么你应该使用?运算符(零或一次出现)
in(ch|ches)?
甚至
in(ch(es)?)?
无论如何,对于这种表达方式,我赞成轻松阅读
in|inch|inches
答案 5 :(得分:0)
答案 6 :(得分:0)
除了其他答案和关于|的提示和选项i。
也许您还需要对前面的角色进行测试。想想像这样的短语,如果涉及到捏,你会找到一个测量
我的第二个正则表达式检查前导空格或数字。也许你还需要一个\ A作为字符串的开头。
[
'if it comes to the pinch, you find a measurement',
'5 inches',
'5inches',
].each{|phrase|
puts phrase
[
/in(ch|ches)/,
/(\s|\d)in(ch|ches)/
].each{|regex|
if phrase =~ regex
puts "-> hits #{regex}"
end
}
}