سؤال

أحاول أن أتأتي = سلسلة 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] كما هو الحال في إجابة تاتو.

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