Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Pcre_Onigmo - Fatal编程技术网

Ruby 确保范围内的模式不匹配

Ruby 确保范围内的模式不匹配,ruby,regex,pcre,onigmo,Ruby,Regex,Pcre,Onigmo,我试图创建一个正则表达式,它匹配字符串某个部分的模式,但不匹配字符串另一部分的模式 我正在尝试匹配一个子字符串 (i) 被一个或多个连续反勾号的平衡对包围` (ii)且不包括与周围图案中一样多的连续回勾 (iii)周围的图案(反勾号序列)与其他反勾号不相邻 这是标记语法中内联代码表示法的一些变体 匹配的示例如下: "xxx`foo`yyy" # => matches "foo" "xxx``foo`bar`baz``yyy" # => matche

我试图创建一个正则表达式,它匹配字符串某个部分的模式,但不匹配字符串另一部分的模式

我正在尝试匹配一个子字符串

(i) 被一个或多个连续反勾号的平衡对包围
`

(ii)且不包括与周围图案中一样多的连续回勾

(iii)周围的图案(反勾号序列)与其他反勾号不相邻

这是标记语法中内联代码表示法的一些变体

匹配的示例如下:

"xxx`foo`yyy"               # => matches "foo"
"xxx``foo`bar`baz``yyy"     # => matches "foo`bar`baz"
"xxx```foo``bar``baz```yyy" # => matches "foo``bar``baz"
实现这一目标的一个正则表达式是:

/(?<!`)(?<backticks>`+)(?<inline>.+?)\k<backticks>(?!`)/
第一个使用非贪婪匹配,第二个使用显式非匹配模式
[^']

我想知道,当禁止的模式不是单个字符时,是否可能有第二种形式


回到最初的问题,有消极的前瞻语法
(?!)
,但我不能限制它的有效范围。如果我让我的正则表达式如下:

/(?<!`)(?<backticks>`+)(?<inline>(?!.*\k<backticks>).*)\k<backticks>(?!`)/
/(?`+(?。*\k.*)\k(?!`)/
然后,
(?!*\k)
的效果将不限于
(?…)
内,而是扩展到整个字符串。由于这与末尾的
\k
相矛盾,因此正则表达式无法匹配


是否有正则表达式技术来确保某个范围内的模式(不一定是单个字符)不匹配?

您可以搜索不是分隔符第一个字符的一个或多个字符:

/(?<!`)(?<backticks>`+)(?<inline>(?:(?!\k<backticks>).)+)\k<backticks>(?!`)/
/(?`+)((?!\k)。+)\k(?!`)/

是否可以进一步简化为
/(?`+((?!\k.)+)\k(?!`)/
?这是否相等?就我所尝试的而言,我觉得是这样。
(?:(?!\k)。+
被称为一个。根据“何时使用此技术”部分,在无需避免跨过
{MID}
部分的情况下,惰性点匹配对应项更有效。Sawa,你不必去掉懒惰的量词,因为它更有效。
/(?<!`)(?<backticks>`+)(?<inline>(?:(?!\k<backticks>).)+)\k<backticks>(?!`)/