Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 这个角色去了哪里?_Ruby_Regex_Onigmo - Fatal编程技术网

Ruby 这个角色去了哪里?

Ruby 这个角色去了哪里?,ruby,regex,onigmo,Ruby,Regex,Onigmo,我将字符串与正则表达式匹配: s = "`` `foo`" r = /(?<backticks>`+)(?<inline>.+)\g<backticks>/ 为什么$~[:inline]不是“`foo”?由于$&是s,我希望: $~[:backticks] + $~[:inline] + $~[:backticks] 要成为s,但它不是,一个反勾号就消失了。回跳到哪里去了?这实际上是意料之中的。看: (?`+)-匹配1+个反向标记,并将它们存储在命名的捕

我将字符串与正则表达式匹配:

s = "`` `foo`"
r = /(?<backticks>`+)(?<inline>.+)\g<backticks>/
为什么
$~[:inline]
不是
“`foo”
?由于
$&
s
,我希望:

$~[:backticks] + $~[:inline] + $~[:backticks]

要成为
s
,但它不是,一个反勾号就消失了。回跳到哪里去了?

这实际上是意料之中的。看:

  • (?`+)
    -匹配1+个反向标记,并将它们存储在命名的捕获组“反向标记”(有两个反向标记)。然后
  • (?。+)
    -1+个字符(换行符除外)匹配到“内联”命名的捕获组中。它获取所有字符串和回溯,以向递归子模式(实际上是“回溯”捕获组)生成字符。所以
  • \g
    -查找字符串末尾的1个反勾号。它满足匹配1+反勾号的条件。此处重新写入命名的捕获“backtick”缓冲区
匹配的工作原理如下:

"`` `foo`"
 ||1
   | 2 |
       |3

然后1变为3,因为1和3是同一组,你会看到一个倒勾。

谢谢。这个问题很愚蠢。我把
\g
误用为
\k
。是的,有一个反向引用。
"`` `foo`"
 ||1
   | 2 |
       |3