0

好的,所以我有我创建的这个正则表达式,它在 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 代码。

4

5 回答 5

2

您在模式(/代码)中间包含正斜杠。要么逃避它,要么用其他东西划定你的模式(我更喜欢!)。

于 2009-01-27T04:50:16.073 回答
2

将正则表达式从 RegexBuddy 传输到 PHP 时,可以在 Use 选项卡上生成源代码片段,或者单击顶部工具栏上的 Copy 按钮,然后选择复制为 PHP preg 字符串。然后 RegexBuddy 将自动添加 PHP 需要的分隔符和标志,而不会留下任何未转义的内容。

于 2009-01-27T14:37:40.927 回答
1

这是因为你没有逃脱结束标记/

转义反斜杠也不会受到伤害:

$pattern = "/\\[code\\](.*)\\[\\/code\\]/si";

PHP 允许您选择任何字符作为正则表达式分隔符,因此我会经常使用在正则表达式中也没有使用的字符,例如@.

$pattern = "@\\[code\\](.*)\\[/code\\]@si";
于 2009-01-27T04:52:21.280 回答
0

这有效:

$pattern = '/\[code\](.*)\[\/code\]/si';
于 2009-01-27T05:20:22.767 回答
-1

您需要在 /code 中转义正斜杠

$pattern = '/\[code\](.*)\[\/code\]/si';

另外,请意识到匹配项存储在 $code 中,而不是 $m

编辑:被打败了:p

于 2009-01-27T04:55:27.573 回答