PHP Regex للاستيلاء على {TAG} شيء {/ Tag}
-
19-09-2019 - |
سؤال
أحاول أن أتأتي = سلسلة Regex لاستخدامها باستخدام وظائف PHP PREG (PREG_MACH، إلخ) و Stumented على هذا:
كيف تتطابق مع هذه السلسلة؟:
{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}
أريد استبداله بسلسلة مختلفة باستخدام preg_replace.
حتى الآن تمكنت من تحديد العلامة الأولى مع preg_match مثل هذا:
preg_match("/\{(area-[0-9]*)\}/", $mystring);
شكرا إذا كنت تستطيع المساعدة!
المحلول
إذا لم تكن قد تعرضت علامات متداخلة، فيجب أن يعمل هذا الأمر البسيط:
preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);
يمكن بعد ذلك العثور على نتائجك في $matches[1]
.
نصائح أخرى
أود أن أقترح
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
هذا سوف يعمل حتى إذا تم تداخل العلامات الأخرى داخل area
علامة كنت تبحث في.
إذا كان لديك عدة area
العلامات المتداخلة داخل بعضها البعض، ستظل تعمل، ولكن ستحتاج إلى تطبيق Regex عدة مرات (مرة واحدة لكل مستوى من التعشيش).
وبالطبع، ستكون محتويات المباريات في $matches[2]
, ، ليس $matches[1]
كما هو الحال في إجابة تاتو.
لا تنتمي إلى StackOverflow