Re: [問題] 請幫忙解一個Regex,取代子字串的問題
看板RegExp (正規表示式 Regular Expression)作者lin1987www (林奕忠)時間11年前 (2014/04/18 09:51)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章