这究竟是如何工作的string.split(/ \?| \。|!/)。size?

时间:2015-07-21 16:32:29

标签: ruby syntax

我知道,或者至少我想我知道,这会做什么(string.split(/\?|\.|!/).size);将每个结束标点处的字符串拆分成一个数组然后获取数组的大小。

我感到困惑的部分是(/\?|\.|!/)

感谢您的解释。

5 个答案:

答案 0 :(得分:3)

正则表达式由斜杠/ /

包围

问号和点之前的反斜杠表示字面上使用这些字符(不要将它们解释为特殊说明)

垂直管道是"或"

所以你有/然后问号\?然后"或" |然后\.然后"或" |然后感叹号!然后/结束表达。

/\?|\.|!/

答案 1 :(得分:2)

这是正则表达式。那个特定的匹配任何'?','。'要么 '!'在目标字符串中。

您可以在此处了解有关他们的更多信息:http://regexr.com/

答案 2 :(得分:2)

char“a”上的正则表达式拆分如下所示:def before_step(context, step): context.step = step 。 “a”或“b”上的正则表达式分割如下:def step_impl(context): if some_condition: take_the_shot(context.scenario.name + " " + context.step.name) 。所以拆分“?”,“!”和“。”看起来像/a/ - 但事实并非如此。不幸的是,“?”和“。”在regexp中有特殊含义,在这种情况下我们不想要,因此必须使用“\”进行转义。

避免这种情况的方法是使用导致/a|b/

/?|!|./

答案 3 :(得分:1)

(/\?|\.|!/)

在外面工作:
括号()捕获所有内容 //告诉Ruby你正在使用正则表达式 \?匹配任何? \.匹配任何. !匹配任何! 前面的\告诉Ruby我们想要在字符串中找到这些特定字符,而不是将它们用作特殊字符。

特殊字符(需要转义才能匹配)是:

. | ( ) [ ] { } + \ ^ $ * ?. 

Ruby RegEx有一个很好的指南:
http://rubular.com/& http://www.tutorialspoint.com/ruby/ruby_regular_expressions.htm

答案 4 :(得分:1)

对于涉及正则表达式的SO答案,我经常使用"扩展"模式,这使他们自我记录。这个将是:

#topmenudiv ul li {

}

@steenslag提到Regexp::union。您也可以使用Regexp::new来编写(使用单引号):

r = /
    \? # match a question mark
    |  # or
    \. # match a period
    |  # or
    !  # match an explamation mark
    /x # extended mode

str = "Out, damn'd spot! out, I say!—One; two: why, then 'tis time to " +
      "do't.—Hell is murky.—Fie, my lord, fie, a soldier, and afeard?" 

str.split(r)
  #=> ["Out, damn'd spot",
  #    " out, I say",
  #    "—One; two: why, then 'tis time to do't",
  #    "—Hell is murky",
  #    "—Fie, my lord, fie, a soldier, and afeard"] 
str.split(r).size #=> 5

但它确实没有给你买任何东西。但是,您可能会发现它在其他情况下很有用。