سؤال

لقد كتبت تعبيرا منتظما لتجريد علامات BBCODE - إنها مجرد شرائط العلامات المسموح بها خارج (في وقت لاحق عد طول السلسلة دون العلامات).

أنا لست خبيرا عندما يتعلق الأمر بالتعبيرات العادية - لذلك بعد ساعة وجدت هذا العمل كثيرا:

$pattern = "/\[\/?(i|b|u|url(.*?)|list|li)[\]\[]*\]/i";
$stripped = preg_replace($pattern, '', $text);

فقط شرائط العلامات الست المسموح بها (وليس أكثر - والتي من المفترض أنها) والعلامة الخاصة 'URL' والتي يمكن تمديدها مثل عنوان URL =http: // mainurl'.

بمعنى آخر

in:  [url=someurl]Lorem[/url] ipsum [test]dolor[/test] sit [b]amet[/b].
out: Lorem ipsum [test]dolor[/test] sit amet.

لكن المشكلة هي أنه لا يتقدم فقط "URL = [Sometext] ولكن أيضا "Urlipsum". حاولت إضافة "=" للتحلل ولكن لم أستطع الوصول إلى هذه النقطة.

هل لدى أي شخص تلميح لي كيفية تجريد عنوان URL فقط عندما يتعلق الأمر =؟

هل كانت مفيدة؟

المحلول

يحاول:

$pattern = '/\[\/?(i|b|u|url(=[^\]]+)?|list|li)[\]\[]*\]/i';

نصائح أخرى

  $pattern = "/\[\/?(i|b|u|url=(.*?)|url(?=\])|list|li)[\]\[]*\]/i";

قد ترغب في تغيير "الجشع" من الكميات، حاول إضافة تعديل نمط "U" أو إزالة علامة الاستفهام في ". *؟"، انظر فب دوك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top