题
我有我的正则表达式的问题。我想翻译的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
);
不隶属于 StackOverflow