Re: [問題] 請幫忙解一個Regex,取代子字串的問題

看板RegExp (正規表示式 Regular Expression)作者 (林奕忠)時間11年前 (2014/04/18 09:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《velk14 (sayou)》之銘言: : 使用語言:PHP preg_replace : 例句: : 小明在[place]台灣[/place]耶,[note]小明在[place]台北[/place]的 : [place]南港[/place]附近[/note],然後小王也在[place]台灣[/place], : [note]小王在[place]高雄[/place][/note],兩人距離很遠。 : 解說&目的: : 1.[place][/place]夾住地名 : 2.[note][/note]夾住註解 : 3.現在要把註解內的[place][/place]改成[nplace][/nplace] : 4.一段註解內可能有很多個地名或是根本沒有地名 : 5.一篇文章內可能也有很多段註解或是沒有任何註解 : 要求輸出結果: : 小明在[place]台灣[/place]耶,[note]小明在[nplace]台北[/nplace]的 : [nplace]南港[/nplace]附近[/note],然後小王也在[place]台灣[/place], : [note]小王在[nplace]高雄[/nplace][/note],兩人距離很遠。 : 目前問題: : 試了很久一直無法達到要求,常常把小王也在台灣的place改成nplace了, : 或是被note夾住的place沒有完全變成nplace : 小弟我對於正規的觀念不是非常清晰,懇請厲害的大大們幫解答謝謝! 目標是將 [note] 當中 [place] 改成 [nplace]。 我的作法需要取代n次,n是根據[note]中的[place]數量做決定。 因為每次只取代[note]中的其中一個[place]標籤。 想法: 1.截取 note 的文字 ------------------ (\[)(note)(\])((?:.|[\r\n])*?)(\1\/\2\3) ------------------ $1$2$3$4$5 ------------------ 2.篩選出 note 中有 place 標籤 ------------------ (\[)(note)(\])((?:.|[\r\n])*?)(\[)(place)(\]) ((?:.|[\r\n])*?)(\5)(\/)(\6\7)((?:.|[\r\n])*?)(\1\/\2\3) ------------------ $1$2$3$4$5n$6$7$8$9$10n$11$12$13 ------------------ 取代格式上前面加個n 使得 [place] 變成 [nplace] 其格式說明 http://regex101.com/r/kS4sT6 由 1F 提供的註解網址,琢磨數次後才勉強達成 Finding Comments in Source Code Using Regular Expressions http://ostermiller.org/findcomment.html -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.106.87 ※ 文章網址: http://www.ptt.cc/bbs/RegExp/M.1397785867.A.AB3.html
文章代碼(AID): #1JK8KBgp (RegExp)
文章代碼(AID): #1JK8KBgp (RegExp)