我正在尝试替换论坛上过时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);
此外,您的正则表达式有许多语法错误:
- 您需要确定模式的开始和结束(我在上面使用了
|
) - 你需要避开方括号
- 你不需要转义你的引号,在v之后你有一个额外的引号=
- 您需要一个
i
修饰符来使匹配不区分大小写