Re: [問題] 請幫忙解一個Regex,取代子字串的問題
看板RegExp (正規表示式 Regular Expression)作者lin1987www (林奕忠)時間11年前 (2014/05/08 21:08)推噓0(0推 0噓 0→)留言0則, 0人參與討論串3/3 (看更多)
※ 引述《lin1987www (林奕忠)》之銘言:
: ※ 引述《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
之前的版本取代很慢,所以對效能進行改善 Orz
大量使用 Negative Lookbehind 效能改善
------------------
(\[note\])
((?:(?!\[\/note\]|\[place\])(?:.|[\r\n]))*)
(?:(\[place\])
((?:(?!\[\/place\])(?:.|[\r\n]))*)
(\[\/place\]))
((?:(?!\[\/note\])(?:.|[\r\n]))*)
(\[\/note\])
------------------
取代字串,將每次只取代其中一個 place 變成 nplace。
$1$2[nplace]$4[/nplace]$6$7
其格式說明
http://regex101.com/r/qG6bM7
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.106.87
※ 文章網址: http://www.ptt.cc/bbs/RegExp/M.1399554510.A.B99.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章