[英]Escaping my own regular expressions
我有一個功能,可以將較大的文本內容中的匹配內容替換為其他內容。
這是[5]內容
因此,在此示例中,正則表達式在“ []”中查找任何內容,並將其替換為由“ 5”確定的內容,比方說表中索引為5的字符串。
這是我正在使用的正則表達式:
/(?<!/)\[(.*?)\]?\]/
對其他功能進行了一些額外的括號檢查,並且現在看起來不包含任何以'/'開頭的標記
我想做的是,當標簽用/進行轉義時,它將刪除轉義字符並在下一個匹配項上繼續。
所以:
這是/ [5]的內容
變成:
這是[5]內容
相對於:
這是[5]內容
變得:
這是[在此處插入內容]內容
我希望不要太困惑。
我當前替換匹配內容的方式是使用遞歸函數,該函數查找第一個匹配項,將其替換,更新原始材料,然后將其稱為自身,直到沒有匹配項為止。 這可能是我問題的根源,但我想不出另一種解決方法。 如果我一次preg_match所有匹配項並循環遍歷每個匹配項,以更新原始內容,則匹配標記的位置從運行preg_match時開始改變,並且一切都變得混亂。
這是有關功能的粘貼http://pastebin.com/ckVXNaxt
所以我發現了preg_replace_callback似乎很適合我的需求
return preg_replace_callback( $tagRegex, function($matches){
//if match starts with '/' remove slash and return
//otherwise do logic
}
,$content);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.