我正在尝试查找句子中的最后一个标点符号或空格。
假设我有这个句子:"Hello! What is your name?"
我想要正则表达式返回?
的索引,但是我的正则表达式返回了!
的索引。
我的尝试:
> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil
我认为
$+
返回最高匹配,也就是最后一个匹配项,但它只匹配第一个。
你有什么想法? 提前感谢您!
使用rindex
查找最后一个匹配项:
s = "Hello! What is your name?"
i = s.rindex(/[[:punct:]]/)
puts i
结果:
24
/[[:punct:]\s][^[:punct]\s]*\z/
您的示例结果将在24小时内返回。
正则表达式匹配标点符号或空格后只跟非标点符号或空格字符,然后是字符串结尾。因此,它会找到字符串中的最后一个标点符号/空格。
$+
并没有帮助,因为它不能神奇地多次匹配正则表达式。它只返回最近匹配的最后一个组。如果您的表达式中有7个组,它将等同于$7
。
"abcdefghijklmnopq" =~ /(.)(.)(.)(.)(.)(.)(.)/ # 0
$+ # "g"