English 中文(简体)
preg_match在RegexBuddy中有效,但在php中无效。
原标题:
  • 时间:2009-01-27 04:44:32
  •  标签:

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

最佳回答

你在你的模式中包含了正斜杠 (/code)。 要么转义它,要么用其他方式分隔你的模式(我更喜欢用!)。

问题回答

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

这是因为您没有逃避结束标记/

逃避反斜杠也无妨:

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

PHP 允许您选择任何字符作为 RegEx 分隔符,因此我经常使用一个在正则表达式中未使用的字符,比如 @

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

这个有用:

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

您需要转义反斜杠 /code。

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

此外,请注意比赛存储在$code中,而不是$m中。

编辑:被打败了 :p





相关问题
热门标签