当我读到this XKCD comic的alt(技术标题)文字时,我开始好奇维基百科中的每篇文章最终都指向哲学文章。于是我开始制作一个Web应用程序,显示使用PHP“指向”哪些文章。如何删除“匹配”括号之间的文本?
(PS:不担心流量 - 因为我会私下使用它,不会发出太多的请求,维基百科服务器)
要做到这一点,我有括号和斜体字之间移除文本,并获得第一个链接。其他的事情可以用PHP Simple HTML DOM Parser可以实现,但删除括号内文字是问题..
如果有括号没有括号,然后我可以使用这个表达式:\([^\)]+\)
,但是,像the article about German language,有一些文章都重叠括号(例如:German (Deutsch [ˈdɔʏtʃ] (listen)) is..
),并且以上RegEx无法处理这些情况,因为[^\)]*\)
发现第一个关闭括号,而不是匹配关闭括号。 (其实上面的情况,因为有两个封闭括号之间没有文字不成为问题,但是当有两大右括号之间的联系就成了一个大问题。)
一个肮脏的解决方案,我能想到是这样的:
$s="content of a wikipedia article";$depth=0;$s2="";
for($i=0;$i<strlen($s);$i++){
$c=substr($s,$i,1);
if($c=='(')$depth++;
if($c==')'){if($depth>0)$depth--;continue;}
if($depth==0) $s2.=$c;
}
$s=$s2;
然而,因为它减少了一个字符串转换成单个字符,并且看起来不必要的,我不喜欢这种解决方案
是否有其他方式在一对(匹配)括号删除文本?
例如,我要让这样的文字:
blah(asdf(foo)bar(lol)asdf)blah
成这样:
blahblah
,但不喜欢这样的:
blahbarasdf)blah
编辑:从埃米尔维克斯特罗姆的回答评论,我意识到上述的考虑ach(删除括号之间的文本)可以删除包含括号的链接。然而,我仍然希望上述问题的答案,因为我遇到过类似的问题,我想知道答案...
所以我的问题仍然是:如何删除匹配的括号之间的文本?
我从http://en.wikipedia.org/wiki/Betrayer_of_Worlds随机开始。经过20多条链接,我确实最终成为了哲学。 – deceze 2011-05-26 08:35:03
Yeop,你进入一个哲学/现实循环;) – Dan 2012-08-19 12:33:24