PHP Regex التمديد - كيفية الشريط URL فقط = *؟
سؤال
لقد كتبت تعبيرا منتظما لتجريد علامات 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" أو إزالة علامة الاستفهام في ". *؟"، انظر فب دوك.
لا تنتمي إلى StackOverflow