Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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
Php 标记之间的正则表达式,除非转义_Php_Regex - Fatal编程技术网

Php 标记之间的正则表达式,除非转义

Php 标记之间的正则表达式,除非转义,php,regex,Php,Regex,我围绕Pygments库制作了一个PHP包装器,突出显示代码块。用于代码块检测的正则表达式可以在配置文件中配置。(json格式) 在json值中看起来如下所示: { "codeblock_regex": "\\[pygments=(.*?)\\](.*?)\\[\\/pygments\\]" } 在JSON解码后应该是这样的: \[pygments=(.*?)\](.*?)\[\/pygments\] 这很糟糕,因为它不允许逃跑,我希望人们能够做到这一点: \[pygments=

我围绕Pygments库制作了一个PHP包装器,突出显示代码块。用于代码块检测的正则表达式可以在配置文件中配置。(json格式)

在json值中看起来如下所示:

{ 
    "codeblock_regex": "\\[pygments=(.*?)\\](.*?)\\[\\/pygments\\]" 
}
在JSON解码后应该是这样的:

\[pygments=(.*?)\](.*?)\[\/pygments\]
这很糟糕,因为它不允许逃跑,我希望人们能够做到这一点:

\[pygments=lexer]some code here[/pygments]
和pygments来检测
\
并忽略该代码块。我试过了

 "(^\\\\)\\[pygments=(.*?)\\](.*?)\\[\\/pygments\\]"
json\u解码之后应该是这样的:

 (^\\)\[pygments=(.*?)\](.*?)\[\/pygments\]

然而,这只会使它忽略一切,甚至是常规块,所以肯定有什么我做错了。正如您所看到的,我远不是正则表达式专家。

您需要的是一个相当棘手的正则表达式特性,称为。“零宽度”表示它匹配输入的零个字符,“负宽度”表示它只有在未找到时才成功,“向后看”表示它向后看

其语法是
(?其中
test
是您不希望出现的东西

在您的例子中,您希望匹配一个
[
,但如果前面有一个
\
,则忽略它,这两个都需要转义,因此您需要
(?)


因此,您的正则表达式以(在PHP中)
$re='/(?您需要的是一个相当复杂的正则表达式特性,称为“零宽度”,表示它匹配输入的零个字符,“负”表示只有在找不到时才成功,“向后看”表示它向后看

其语法是
(?其中
test
是您不希望出现的东西

在您的例子中,您希望匹配一个
[
,但如果前面有一个
\
,则忽略它,这两个都需要转义,因此您需要
(?)


因此,您的正则表达式最终为(在PHP中)
$re='/(?谢谢,今晚我将尝试它,并告诉您结果以及它是否工作!是的,当转义符号多于实际符号时,就会发生这种情况:)谢谢,我今晚会试试,告诉你结果和它是否有效!是的,这就是当逃跑迹象多于实际迹象时发生的情况:)