我试图在句子中找到最后一个标点符号或空格字符。
鉴于我有句子,"Hello! What is your name?"
我希望正则表达式返回?
的索引,但我的正则表达式返回!
的索引
我的尝试:
> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil
我相信$+
会返回最高匹配,所以最后一场比赛,但它只匹配第一场比赛。
思考? 提前谢谢!
答案 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"