كيفية كتابة تعبير منتظم لتحليل HTML؟
-
16-09-2019 - |
سؤال
أحاول كتابة تعبير منتظم لمحلل HTML الخاص بي.
أريد أن أتفق مع علامة HTML مع سمة معينة (على سبيل المثال. <div>
مع class="tab news selected"
) يحتوي على واحد أو أكثر <a href>
العلامات. يجب أن يتطابق RegExp العلامة بأكملها (من <div>
ل </div>
). يبدو دائما أن أحصل على أخطاء "استنفدت الذاكرة" - من المحتمل أن يأخذ برنامجي كل علامة يمكن العثور عليه كمطابق واحد.
أنا أستخدم مكتبات Boost Regex.
المحلول
قد تجد أيضا هذه الأسئلة مفيدة:
يمكنك تقديم بعض الأمثلة حول سبب صعوبة تحليل XML و HTML مع Regex؟
هل يمكنك تقديم مثال على تحليل HTML مع المحلل المحلل المفضل لديك؟
نصائح أخرى
ربما يجب أن تنظر في هذا السؤال يكرر. Regexps و html. GIST هو أن استخدام تعبيرات منتظمة لتحليل HTML ليس بالأي حلا مثاليا.
ربما regexps ليست أفضل حل، لكنني أستخدم بالفعل مثل خمسة مكتبات مختلفة وزيادة جيدة عندما يتعلق الأمر بتحديد تحديد موقع <a href>
العلامات والكلمات الرئيسية.
أنا أستخدم هذه Regexps:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
تحديد موقع <a href>
العلامات و:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
لتحديد المواقع الروابط
(راجع للشغل هل يمكن القيام به بشكل أفضل؟ - أنا تمتص في Regex؛))
ما أحتاجه الآن هو تحديد موقع العلامات التي تحتوي على <a href>
وأعتقد أن Regexps سيفعل كل شيء على ما يرام - ربما سأحتاج إلى كتابة وظيفة التحليل الخاصة بي كما قال بيوتر.
تفعل كما المرن يفعل: المباراةu003Cdiv style=";text-align:right;direction:rtl"> مع تطابق غير حساس للحالة، ووضع المحلل المحلل في حالة "DIV المتطابقة"، والحفاظ على معالجة المدخلات حتىu003C/div> وإعادة تعيين الدولة.
هذا يأخذ اثنين من regexps ومتغير الدولة.
SGML العلامات أحرف صالحة هي [A-ZA-Z_:
لذلك: / <[A-ZA-Z _:] +> / يطابق علامة.