0

我真的不知道如何为此创建一个 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] 问题...... :(

4

2 回答 2

2

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

这将假设您不想检查无效的 url 字符。您的示例未能获取许多在 url 中有效的字符,从而破坏了您正在寻找的功能。这是一个更完整的版本:

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

于 2013-02-07T18:10:58.027 回答
1

你只需要把你的字符匹配放在括号中

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

问题编辑后

试试这个

\[url="(.*?)"\](.*?)\[\!url\]
于 2013-02-07T18:08:28.127 回答