好的,所以这是交易......
我正在尝试解析这个问题:
[time_zone] => [[Central European Time|CET]]
[utc_offset] => +1
[time_zone_DST] => [[Central European Summer Time|CEST]]
[utc_offset_DST] => +2
[drives_on] => right
[calling_code] => [[Telephone numbers in Italy|39]]
[cctld] => [[.it]]
简而言之,我正在尝试将[[X]]
替换为X
,将[[Anything|X]]
替换为X
。
这就是我提出的正则表达式:
(?:\[\[(?:[^\|]+)\|([^\|\]]+)\]\])|\[\[(.+)?\]\]
这看起来很好。
所以,我想这样做:
preg_replace("/$mypattern/","$1",$mystring);
但是,这里有一个问题:
匹配[[X]]
时,捕获的群组为$2
。
而在另一种情况下,它是$1
。
解决这个问题最优雅的方法是什么?
答案 0 :(得分:1)
嗯...像往常一样,我想出了一个解决方案,几秒钟之后我已经在SO中发布了这个问题...大声笑。
所以,解决方案就是改变正则表达式(是的,现在捕获的组总是$1
) - 更新:
\[\[(?:(?:[^\]]+)?\|)?([^\]]+)?\]\]
PS 我仍然有兴趣知道上面的正则表达式是否有解决方法(我的意思是没有必须改变它,和/或诉诸复杂preg_match_all
事物等)