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() 的参数计数错误

感谢您的帮助。

此外,您的代码不会按照您的意愿执行。请使用这些代码。

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

参数列表中第一个逗号前后缺少引号

$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. 您需要一个i修饰符来使匹配不区分大小写

最新更新