繁体   English   中英

preg_match在regexbuddy中起作用,不在php中起作用

[英]preg_match works in regexbuddy, not in php

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

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

将您的正则表达式从RegexBuddy转移到PHP时,请在“使用”选项卡上生成源代码片段,或者单击顶部工具栏上的“复制”按钮,然后选择将其复制为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM