创建[url =“link”]标题[!url]样式preg_replace

时间:2013-02-07 18:04:22

标签: php regex

我真的无法弄清楚如何为此创建一个preg_replace:

[url="link"]title[!url]

给了我:

<a href="link">title</a>

我正在尝试这个:

$patterns = array();
$replacements = array();
$patterns[0] = '/\[b\]/';
$patterns[1] = '/\[\!b\]/';
$patterns[2] = '/\[url="([*]+)"\]([*]+)\[\!url\]/';
$replacements[0] = '<strong>';
$replacements[1] = '</strong>';
$replacements[2] = '<a href="$1">$2</a>';

echo preg_replace($patterns, $replacements, $text);

[b],[!b]工作得很好......但我无法解决[url]问题...... :(

2 个答案:

答案 0 :(得分:2)

preg_replace('/\[url="(.+?)"\](.+?)\[\!url\]/', '<a href="$1">$2</a>', $string)

这将假设您不想检查无效的网址字符。你的例子无法拾取很多在网址中有效的字符,从而破坏了你正在寻找的功能。这是一个更完整的版本:

preg_replace('/\[url="([A-Za-z0-9\-._~:\/?#[\]@!$@&()\'*+,;=%]+)"\](.+)\[\!url\]/', '<a href="$1">$2</a>', $string)实际上是一个更完整,RFC 3986兼容的正则表达式。

答案 1 :(得分:1)

你只需要将你的角色匹配放在括号中

\[url="([a-z0-9A-Z_.-]+)"\]([a-z0-9A-Z\s_.-]+)\[\!url\]

问题编辑后

试试这个

\[url="(.*?)"\](.*?)\[\!url\]