我真的无法弄清楚如何为此创建一个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]问题...... :(
答案 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\]