Php 标记之间的正则表达式,除非转义
我围绕Pygments库制作了一个PHP包装器,突出显示代码块。用于代码块检测的正则表达式可以在配置文件中配置。(json格式) 在json值中看起来如下所示:Php 标记之间的正则表达式,除非转义,php,regex,Php,Regex,我围绕Pygments库制作了一个PHP包装器,突出显示代码块。用于代码块检测的正则表达式可以在配置文件中配置。(json格式) 在json值中看起来如下所示: { "codeblock_regex": "\\[pygments=(.*?)\\](.*?)\\[\\/pygments\\]" } 在JSON解码后应该是这样的: \[pygments=(.*?)\](.*?)\[\/pygments\] 这很糟糕,因为它不允许逃跑,我希望人们能够做到这一点: \[pygments=
{
"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='/(?谢谢,今晚我将尝试它,并告诉您结果以及它是否工作!是的,当转义符号多于实际符号时,就会发生这种情况:)谢谢,我今晚会试试,告诉你结果和它是否有效!是的,这就是当逃跑迹象多于实际迹象时发生的情况:)