为什么这个片段:
'He said "Hello"' =~ /(\w)\1/
匹配"ll"
?我认为\w
部分与"H"
匹配,因此\1
指的是"H"
,因此不应该匹配任何内容?但为什么会这样呢?
答案 0 :(得分:3)
我认为\ w部分匹配“H”
\w
匹配任何字母数字字符(和下划线)。 也恰好与H
匹配,但这并不是非常有趣,因为正则表达式继续表示必须匹配两次 - {{1} }}不能在你的文本中(因为它不会连续出现两次),也不会是任何其他字符,只有H
。因此正则表达式与l
匹配。
答案 1 :(得分:3)
你在想/^(\w)\1/
。插入符号指定匹配必须从行的开头开始。没有它,匹配可以从字符串中的任何地方开始(它将找到第一个匹配)。
答案 2 :(得分:2)
你说得对,在那个位置没有匹配。然后正则表达式进一步发现匹配,它返回给你。
\w
当然与任何单词字符匹配,而不仅仅是'H'
。
答案 3 :(得分:0)
重点是,“\ 1”表示“(\ w)”块重复一次,只有字母“l”加倍并且与你的正则表达式匹配。
使用ruby和正则表达式来玩弄的一个很好的页面是Rubular