作者lin1987www (林奕忠)
看板RegExp
标题Re: [问题] 请帮忙解一个Regex,取代子字串的问题
时间Fri Apr 18 09:51:04 2014
※ 引述《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://webptt.com/cn.aspx?n=bbs/RegExp/M.1397785867.A.AB3.html