帮助RegEx

wil*_*ber 0 php regex bbcode

我的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,我想翻译回来,我只有链接的第一个字符.

大家能帮帮我吗?提前致谢

Kob*_*obi 5

至于你的第一个问题,*是贪婪的,所以它捕获了第一个和最后一个链接之间的所有内容.一个简单的解决方案是使用非贪婪的限定符,或者不允许[]在您的组中:

\[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)