匹配测量的正则表达式

时间:2011-08-02 21:29:43

标签: ruby regex

我正试图从我的树梢语法中的字符串中选择测量值。

我试图简单地说出'英寸'的所有不同方式,所以我的正则表达式是

in(|ches|ch|)?i

我认为上面所说的是 以'in'开头,可能有'ches'或'ch',并进行不区分大小写的搜索

我一直试图让这个在http://rubular.com/中发挥作用,但一直无法做到。

我完全不知道正则表达式应该如何工作?我尝试了各种带引号,方括号等的组合,但没有运气。

7 个答案:

答案 0 :(得分:2)

你有太多|个; |表示或,因此您匹配in后跟the empty stringcheschthe empty string。然后你跟我一起关注它,所以你的正则表达式将匹配iniinchiinchesi

您可以使用:

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)

正则表达式

/in(ches|ch)?/i

Rubular示例

http://rubular.com/r/taKbHiVqys

答案 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
  }
}