Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用正则表达式匹配PHP中的标记集_Php_Regex_Tags_Preg Match_Newline - Fatal编程技术网

用正则表达式匹配PHP中的标记集

用正则表达式匹配PHP中的标记集,php,regex,tags,preg-match,newline,Php,Regex,Tags,Preg Match,Newline,我目前正在努力保护我的AJAX聊天免受攻击,方法是在将PHP中的所有文本传递到客户端之前检查它们。到目前为止,我已经成功地完成了我的任务,除了一部分我需要匹配一组图像标签 总的来说,我希望它能够在我管理的一组标记之间找到任何换行符的实例,但是我的解决方案是贪婪的,如果有多组标记,它也会匹配标记之外的换行符 目前,如果我只想匹配[img]{newline}[/img] if(preg_match('/\[\bimg\].*\x0A.*\[\/\bimg\]/', $text)){ //code }

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

总的来说,我希望它能够在我管理的一组标记之间找到任何换行符的实例,但是我的解决方案是贪婪的,如果有多组标记,它也会匹配标记之外的换行符

目前,如果我只想匹配
[img]{newline}[/img]

if(preg_match('/\[\bimg\].*\x0A.*\[\/\bimg\]/', $text)){ //code }
但是如果我想做
[img]image.jpg[/img]{newline}[img]image.jpg[/img]
,它只看到我不想要的第一个和最后一个标记

所以现在我问,如何使它正确地匹配每一组标记


编辑:澄清。标记中的任何换行符都是错误的,所以我想检测它们。标记外的任何换行符都很好,我想忽略它们。原因是,如果客户端在标记中处理换行符,它会崩溃。

只需将
放在两个
*

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

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

我不知道你为什么要这样做,但是你可以通过在正则表达式中添加
s
修饰符来使
匹配换行符。然后它只是
”(\[img\](.*?\[/img\])是“
”来匹配它,你甚至可以捕获该组,并根据需要单独检查它是否有换行符。

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

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

另请参见我已尝试放置的

?之后。*之前,它仍然匹配错误。我相信你看错了我的问题,所以我添加了澄清。这似乎没有任何作用。