我知道,或者至少我想我知道,这会做什么(string.split(/\?|\.|!/).size);
将每个结束标点处的字符串拆分成一个数组然后获取数组的大小。
我感到困惑的部分是(/\?|\.|!/)
。
感谢您的解释。
答案 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
但它确实没有给你买任何东西。但是,您可能会发现它在其他情况下很有用。