REGEX替换论坛帖子的行

时间:2011-06-28 18:50:52

标签: regex

我正在尝试从论坛上过时的mod中替换文本。旧代码看起来像这样

[ame="http://www.youtube.com/watch?v=wYJ20INbM7Q"]YouTube - ‪Bill O'Reilly Interviews Rapper Lupe Fiasco - 06/20/11‬‏[/ame]

我希望新代码看起来像这样:

[video=youtube;wYJ20INbM7Q]http://www.youtube.com/watch?v=wYJ20INbM7Q[/video]YouTube - Bill O'Reilly Interviews Rapper Lupe Fiasco - 06/20/11[/video]

我用过:

$text = preg_replace('[ame="http://www.youtube.com/watch?v="([a-z0-9]+)\"],
([video=youtube;$2]http://www.youtube.com/watch?v=$2[/video])', $text);

错误:警告:preg_replace()

的参数计数错误

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

您在参数列表

中的第一个逗号之前和之后缺少引号
$text = preg_replace('|\[ame="http://www.youtube.com/watch\?v=([a-z0-9]+)"\]|i', '[video=youtube;$1]http://www.youtube.com/watch?v=$1[/video]', $text);

此外,您的正则表达式有许多语法错误:

  1. 您需要确定模式的开头和结尾(我上面使用了|
  2. 你需要摆脱方括号
  3. 您无需转义报价,并且在v =
  4. 之后还有额外报价
  5. 您需要一个i修饰符才能使您的匹配不区分大小写

答案 1 :(得分:1)

此外,您的代码将无法满足您的需求。请改用它们。

$regEx = '#\[ame\=".*?\=([a-zA-Z0-9]*?)"]#';
$replacement = "([video=youtube;$1]http://www.youtube.com/watch?v=$1[/video])";
$text = preg_replace($regEx, $replacement, $text);