Ruby正则表达式:找到最后一个标点符号

时间:2011-11-03 20:08:50

标签: ruby regex

我试图在句子中找到最后一个标点符号或空格字符。

鉴于我有句子,"Hello! What is your name?"

我希望正则表达式返回?的索引,但我的正则表达式返回!的索引

我的尝试:

> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil

我相信$+会返回最高匹配,所以最后一场比赛,但它只匹配第一场比赛。

思考? 提前谢谢!

2 个答案:

答案 0 :(得分:5)

要查找最后一场比赛,请使用rindex

s = "Hello! What is your name?"
i = s.rindex(/[[:punct:]]/)
puts i

结果:

24

查看在线工作:ideone

答案 1 :(得分:3)

的比赛
/[[:punct:]\s][^[:punct]\s]*\z/

为您的示例生成24。

正则表达式匹配标点符号或空格,后跟非标点符号或空格字符,然后是字符串结尾。因此,它会找到字符串中的最后一个标点符号/空格。

$+没有帮助,因为它几次没有神奇地匹配正则表达式。它只返回最近一场比赛的最后一组。如果您有例如表达式中的7个组将等于$7

"abcdefghijklmnopq" =~ /(.)(.)(.)(.)(.)(.)(.)/  # 0
$+ # "g"