好的,所以我创建了这个正则表达式,它在RegexBuddy中工作正常,但是当我将它加载到php时却没有。下面是一个例子。
使用RegexBuddy我可以使用它:
\[code\](.*)\[/code\]
检查点匹配换行符时,我添加了不区分大小写,但它也是这样。
这是php:
$q = "[code]<div>html code to display on screen</div>[/code]";
$pattern = '/\[code\](.*)\[/code\]/si';
$m = preg_match($pattern, $q, $code);
所以你可以看到我正在使用[code] [/ code],然后一旦我可以提取它,我将在其上运行htmlentities()来显示而不是渲染html代码。
答案 0 :(得分:2)
您在模式中间包含正斜杠(/ code)。要么逃避它,要么用别的东西划定你的模式(我更喜欢!)。
答案 1 :(得分:2)
将正则表达式从RegexBuddy传输到PHP时,要么在“使用”选项卡上生成源代码段,要么单击顶部工具栏上的“复制”按钮,然后选择复制为PHP preg字符串。然后RegexBuddy将自动添加PHP所需的分隔符和标志,而不会留下任何未转义的内容。
答案 2 :(得分:1)
这是因为你没有逃避结束标记/
逃避反斜杠也不会伤害:
$pattern = "/\\[code\\](.*)\\[\\/code\\]/si";
PHP允许您选择任何字符作为RegEx分隔符,因此我经常使用一个不在正则表达式中使用的字符,如@
。
$pattern = "@\\[code\\](.*)\\[/code\\]@si";
答案 3 :(得分:0)
这有效:
$pattern = '/\[code\](.*)\[\/code\]/si';
答案 4 :(得分:-1)
您需要在/ code
中转义正斜杠$pattern = '/\[code\](.*)\[\/code\]/si';
此外,实现匹配存储在$ code中,而不是$ m
编辑:挨打:p