php中的正则表达式从wiki文本中删除引文

时间:2011-08-14 11:39:18

标签: php regex preg-replace html-parsing

从给定的示例文本中,我希望文本与[[]]和{{}}

中包含的文本区分开来

示例文字:

1988年12月11日,年仅15岁零232天,Tendulkar在[[孟买板球队|孟买]]的首场[[一流板球|一流]]比赛中没有得分100 [] [古吉拉特邦板球队|古吉拉特邦],使他成为最年轻的印第安人,在一流的首秀中获得了一个世纪的成绩。他在他的第一个Deodhar和Duleep Trophy中打入了一个世纪。 {{cite web | url = http://www.espnstar.com/cricket/international-cricket/news/detail/item136972/Sachin-Tendulkar-factfile/ | title = Sachin Tendulkar factfile | publisher = www.espnstar.com |访问日期= 2009年8月3日}}他被孟买队长[[Dilip Vengsarkar]]选中后,看到他在篮网中谈判[[卡皮尔开发]],并在本赛季结束时成为孟买的最高得分手。他获得了583分的成绩。平均为67.77,并且是整体得分第六高的{{cite web | url = http://blogs.cricinfo.com/link_to_database/ARCHIVE/1980S/1988-89/IND_LOCAL/RANJI/STATS/IND_LOCAL_RJI_AVS_BAT_MOST_RUNS.html | title = 1988-89 Ranji season - Most Runs | publisher = Cricinfo | accessdate = 2009年8月3日}}他在[[Irani Trophy]]决赛中也创造了一个不败的世纪,{{cite web | url = http:// cricketarchive.com/Archive/Scorecards/52/52008.html|title=Rest of India v Delhi in 1989/90 | publisher = Cricketarchive | accessdate = 2009年8月3日}}并且在一年级的一个赛季之后被选中参加巴基斯坦之旅。

我试过了:

$patterns = ("/^{{*/", "/*}}$/" );$replacements = "";
  preg_replace($patterns, $replacements, $parts);
  print_r($parts);

和此:

$parts = preg_replace("/\[(?:\\\\|\\\]|[^\]])*\]/", "", $ans_str);

这也是:

$pattern = ("/\[.*?\]/", "/\{.*?\}/");
  $ans = preg_replace($pattern, "", $parts);

它不起作用。 请帮助,谢谢。

3 个答案:

答案 0 :(得分:6)

这应该可以解决问题

$str = "On 11 December 1988, ...";
$str = preg_replace('/\{\{.+\}\}/Us', '', $str);
var_dump($str);

U修饰符用于ungreedy模式,这意味着尽快停止匹配(以避免所有引用被捕获为一个巨大的匹配)。

编辑:添加了s修饰符,请参阅注释

答案 1 :(得分:0)

// remove `{{cite}}` tags
$str = preg_replace('/\s*\{\{[^}{]*+\}\}\s*/', ' ', $str);

// remove links--including rollover text--leaving link text
$str = preg_replace('/\[\[(?:[^][|]*+\|)?+([^][]*+)\]\]/', '$1', $str);

<强> see demo on ideone.com

答案 2 :(得分:-1)

以下两行就是诀窍:

$str = preg_replace(/\s*\{{.*?\}}\s*/g, " ", $str);//to remove the curly braces and the text between them.
$str = preg_replace(/[\[(.)\]]/g, "", $str);//to remove the square braces.

抱歉它出了问题。