簡體   English   中英

轉義我自己的正則表達式

[英]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);

我的成品http://pastebin.com/qJ1g0pPq

暫無
暫無

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

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