我有我的正则表达式的问题。我想翻译的BBCode链接像

  

[链接= www.stackoverflow.com]堆栈上溢[/链接]

成HTML链接等

<a href='www.stackoverflow.com'>Stack-Overflow</a>.

在我的字符串时,它的不可能性,以使BBCode的多个链接。 我还需要一个功能转换的HTML回BB代码。

我的功能是 的BBCode要HTML:

$Text = preg_replace('/\[link=([^ ]+).*\](.*)\[\/link\]/', '<a href="$1">$2</a>', $Text);  

HTML要的BBCode:

$Text = preg_replace('/\<a href="([^ ]+).*\">(.*)\<\/a\>/Usi', '[link=$1]$2[/link]', $Text); 

我的问题是thees功能,当我有一个以上的链接,这是行不通的,而当我有一个链接转换为HTML,我想转换回,我只有链接的第一个字符。

每个人都可以帮助我吗? 由于事先

有帮助吗?

解决方案

至于你的第一个问题,*是贪婪的,所以它捕获的第一个和最后环节之间的一切。一个简单的解决方案是使用一个非贪婪限定符,或不允许[]在你的群组:

\[link=([^ \[\]]+)\]([^\[\]]*)\[\/link\]

类似地,对于周围的其他方法:

<a href="([^ "]+)">([^<]*?)\<\/a\>

这里的非贪婪版本。它允许在链接[],和更短:

\[link=([^ ]*?)\](.*?)\[\/link\]

其他提示

您的问题是与贪婪。* 采用 ?使其成为非贪婪。

$Text = preg_replace(
    '/\[link=([^ ]+).*?\](.*?)\[\/link\]/',
    '<a href="$1">$2</a>',
    $Text
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top