preg_match لعلامات HTML المتداخلة
-
07-07-2019 - |
سؤال
أرغب في الحصول على جميع علامات "dev" والمحتوى الخاص بها من خلال php preg_match_all()
ولكن لا يمكن الحصول على تلك المتداخلة.
بيانات:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
تعبيري حتى الآن:
|<dev>(.*)</dev>|Uis
thanks, for your help, b.
المحلول
لا تستخدم التعبيرات العادية للتحليل.استخدم محللًا حقيقيًا مثل DOMDocument أو SimpleXML:
$xml = simplexml_load_string('<root>'.$str.'</root>');
نصائح أخرى
يجب أن يكون لديك نمط مطابقة عودي:
/<dev>(.*|(?R))<\/dev>/i
سيؤدي ذلك إلى امتصاص أي عناصر متداخلة، لذا إذا كنت تريد تحليلها بعد ذلك، فسيتعين عليك تشغيل الوظيفة مرة أخرى على $matches[1]
ال *
هو عامل جشع، يستهلك أكبر عدد ممكن من الشخصيات.يجب عليك استخدام *?
إصدار غير جشع بدلاً من ذلك للعثور على أصغر التطابقات الممكنة.ربما لا تكون التعابير المنطقية هي أفضل الأدوات للقيام بذلك.
لا تنتمي إلى StackOverflow