سؤال

أحاول كتابة تعبير منتظم لمحلل HTML الخاص بي.

أريد أن أتفق مع علامة HTML مع سمة معينة (على سبيل المثال. <div> مع class="tab news selected" ) يحتوي على واحد أو أكثر <a href> العلامات. يجب أن يتطابق RegExp العلامة بأكملها (من <div> ل </div>). يبدو دائما أن أحصل على أخطاء "استنفدت الذاكرة" - من المحتمل أن يأخذ برنامجي كل علامة يمكن العثور عليه كمطابق واحد.

أنا أستخدم مكتبات Boost Regex.

نصائح أخرى

ربما يجب أن تنظر في هذا السؤال يكرر. Regexps و html. GIST هو أن استخدام تعبيرات منتظمة لتحليل HTML ليس بالأي حلا مثاليا.

كما قال آخرون، لا تستخدم Regexes إذا كان ذلك ممكنا. إذا كان التعليمات البرمجية الخاصة بك في الواقع XHTML (أي أنه أيضا XML مشكلات جيدة)، يمكن أن يوصي AI xerces. و مغترب محلل XML، والذي سيقوم بعمل أفضل بكثير لك من Regexes.

ربما 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 _:] +> / يطابق علامة.

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