سؤال
لدي مشكلة مع regex. أريد ترجمة رابط BBCode مثل
link = www.stackoverflow.com] stack-overflow [/link
في رابط HTML مثل
<a href='www.stackoverflow.com'>Stack-Overflow</a>.
في سلسلتي ، من الممكن أن تصنع أكثر من رابط واحد في BBCode. أحتاج أيضًا إلى وظيفة لترجمة HTML مرة أخرى إلى BBCode.
وظائفي هي 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
);