簡體   English   中英

用正則表達式匹配PHP中的標簽集

[英]Matching sets of tags in PHP with Regular Expression

我目前正在通過檢查PHP中的所有文本(傳遞給客戶端之前)來保護AJAX聊天免受攻擊。 到目前為止,我已經成功完成了我的任務,除了需要匹配圖像標簽集的一部分。

總的來說,我希望它能拾取在我管理過的一組標簽之間存在換行符的任何實例,但是我的解決方案是貪婪的,並且如果有多組標簽,也可以匹配標簽之外的換行符。

目前,如果我只想匹配[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\\])is" ,您甚至可以捕獲該組並根據需要單獨檢查是否有換行符。

嘗試設置s修飾符,如下所示:

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

另請參見正則表達式修飾符PHP文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM