我的RegEx有问题.我想翻译一个BBCode链接
[链接= www.stackoverflow.com]堆栈上溢[/链接]
进入像HTML链接一样
<a href='www.stackoverflow.com'>Stack-Overflow</a>.
Run Code Online (Sandbox Code Playgroud)
在我的String中,可以在BBCode中创建多个链接.我还需要一个函数将html转换回BBCode.
我的功能是BBCode到HTML:
$Text = preg_replace('/\[link=([^ ]+).*\](.*)\[\/link\]/', '<a href="$1">$2</a>', $Text);
Run Code Online (Sandbox Code Playgroud)
HTML到BBCode:
$Text = preg_replace('/\<a href="([^ ]+).*\">(.*)\<\/a\>/Usi', '[link=$1]$2[/link]', $Text);
Run Code Online (Sandbox Code Playgroud)
我的问题是与你的功能,当我有多个链接,它不起作用,当我有一个链接转换为HTML,我想翻译回来,我只有链接的第一个字符.
大家能帮帮我吗?提前致谢
至于你的第一个问题,*是贪婪的,所以它捕获了第一个和最后一个链接之间的所有内容.一个简单的解决方案是使用非贪婪的限定符,或者不允许[]在您的组中:
\[link=([^ \[\]]+)\]([^\[\]]*)\[\/link\]
Run Code Online (Sandbox Code Playgroud)
同样,换句话说:
<a href="([^ "]+)">([^<]*?)\<\/a\>
Run Code Online (Sandbox Code Playgroud)
这是非贪婪的版本.它允许[]链接,甚至更短:
\[link=([^ ]*?)\](.*?)\[\/link\]
Run Code Online (Sandbox Code Playgroud)