正则表达式返回引用

时间:2009-11-23 12:10:57

标签: ruby regex

为什么这个片段:

'He said "Hello"' =~ /(\w)\1/

匹配"ll"?我认为\w部分与"H"匹配,因此\1指的是"H",因此不应该匹配任何内容?但为什么会这样呢?

4 个答案:

答案 0 :(得分:3)

  

我认为\ w部分匹配“H”

\w匹配任何字母数字字符(和下划线)。 恰好与H匹配,但这并不是非常有趣,因为正则表达式继续表示必须匹配两次 - {{1} }}不能在你的文本中(因为它不会连续出现两次),也不会是任何其他字符,只有H。因此正则表达式与l匹配。

答案 1 :(得分:3)

你在想/^(\w)\1/。插入符号指定匹配必须从行的开头开始。没有它,匹配可以从字符串中的任何地方开始(它将找到第一个匹配)。

答案 2 :(得分:2)

你说得对,在那个位置没有匹配。然后正则表达式进一步发现匹配,它返回给你。

\w当然与任何单词字符匹配,而不仅仅是'H'

答案 3 :(得分:0)

重点是,“\ 1”表示“(\ w)”块重复一次,只有字母“l”加倍并且与你的正则表达式匹配。

使用ruby和正则表达式来玩弄的一个很好的页面是Rubular