1

我目前正在通过检查 PHP 中的所有文本在传递给客户端之前保护我的 AJAX 聊天免受攻击。到目前为止,我已经成功完成了我的任务,除了我需要匹配一组图像标签的部分。

总的来说,我希望它能够拾取我管理的一组标签之间存在换行符的任何实例,但是我拥有的解决方案是贪婪的,并且如果有多组标签,我也会匹配标签之外的换行符.

目前,如果我只想匹配,我有以下内容[img]{newline}[/img]

if(preg_match('/\[\bimg\].*\x0A.*\[\/\bimg\]/', $text)){ //code }

但如果我想做[img]image.jpg[/img]{newline}[img]image.jpg[/img],它只会看到我不想要的第一个和结束标签。

所以现在我问,你如何让它正确匹配每组标签?

编辑:为了澄清。标签内的任何换行符都是不好的,所以我想检测它们。标签外的任何换行符都很好,我想忽略它们。原因是,如果客户端处理标签内的换行符,它就会崩溃。

4

2 回答 2

2

只是把它放在?两个之后让它变得不贪心.*

但请注意,您当前的解决方案与此不匹配:

[img]
look, two newlines!
[/img]

我不确定您为什么要这样做,但是您可以.通过将s修饰符添加到您的正则表达式来匹配换行符。然后它只是"(\[img\](.*?)\[/img\])is"为了匹配它,您甚至可以捕获该组并根据需要单独检查它是否有换行符。

于 2013-09-27T13:42:25.480 回答
0

尝试设置 s 修饰符,如下所示:

if (preg_match('/\[\bimg\].*\x0A.*\[\/\bimg\]/s', $text)) { code }

另请参阅正则表达式修饰符的 PHP 文档

于 2013-09-27T13:47:12.127 回答