كيفية العثور على كلمة داخل النص باستخدام XSLT 2.0 و regex (والتي لا تحتوي على حدود كلمة)؟

StackOverflow https://stackoverflow.com/questions/2397574

سؤال

أحاول مسح سلسلة من الكلمات والبحث عن وجود كلمة معينة (حالة غير حساسة) في ورقة أنماط XSLT 2.0 باستخدام Regex.

لدي قائمة بالكلمات التي أرغب في تكرارها وتحديد ما إذا كانت موجودة داخل سلسلة معينة أم لا.

أريد أن أتطابق مع كلمة في أي مكان داخل النص المحدد ، ولكن لا أريد أن أتطابق داخل كلمة (أي البحث عن foo ينبغي ليس تطابق "fooد "والبحث عن bar ينبغي ليس تطابق على "إعادةbar").

XSLT 2.0 regex ليس لديه حدود كلمة (\b) ، لذلك أنا بحاجة إلى تكرارها قدر استطاعتي.

هل كانت مفيدة؟

المحلول

يمكنك استخدام التناوب لتجنب التكرار:

<xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">

نصائح أخرى

إذا كان معالج XSLT 2.0 الخاص بك هو Saxon 9 ، فيمكنك استخدام بناء جملة التعبير العادي Java (بما في ذلك B) مع تطابقات الوظائف ، والرمز والاستبدال عن طريق بدء سمة العلامة بعلامة تعجب:

<xsl:value-of select="matches('all foo is bar', '\bfoo\b', '!i')"/>

ذكر مايكل كاي هذا الخيار مؤخرًا على قائمة المراسلات XSL.

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