العثور على الأخيرة (أقصى اليمين) مباراة للتعبير منتظم التعسفي في روبي

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أعمل على محرر النص في روبي، وأنا بحاجة إلى دعم ميزة "البحث" مع أنماط التعبير العادية التي توفرها للمستخدم. وهنا بسيطة (المألوفة) حالة الاستخدام:

<اقتباس فقرة>   

وجو العضو بتحرير ملف نصي، ووضع المؤشر في مكان ما في منتصف الملف. انه يريد بحث <م> الوراء من موقع المؤشر الحالي لأقرب فرعية مطابقة تعبير عادي التعسفي.

وأنا أفكر أن هذه المشكلة تبلغ تطبيق النمط المستخدم في السلسلة بأكملها التي سبقت في موقع المؤشر في الملف. بالتأكيد، أنا يمكن أن يتكرر خلال جميع المباريات من بداية الملف واستخدام المباراة الاخيرة، ولكن هذا يبدو غير فعال بشكل مؤلم ... سيكون من الأفضل للبحث "اليمين إلى اليسار"، ولكن لم أجد طريقة للقيام هذا مع روبي التعبير العادي. يمكنك أن تساعد؟

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

المحلول

استخدم طريقة rindex على سلسلة الخاص بك. مثل هذا:

>> 'ssBssBss'.rindex(/B/)
=> 5

نصائح أخرى

وتبحث عن .*(foo) ينبغي أيضا تحديد أقصى اليمين فو، وذلك بفضل الطبيعة الجشعة لل* (ولكن قد يكون rindex أسرع - يحتاج إلى microbenchmark للتحقق).

وأعتقد rindex هو الطريق للذهاب. يبدو مثل rindex سوف أعاد في الواقع من خلال سلسلة الوراء. تحقق من خط 957 من string.c

ويبدو كمن برزت وسيلة ل عكس العادية تعبيرات في PERL مرة أخرى في عام 2001. لذا كنت عكس سلسلة وعكس باستخدام التعابير المنطقية ... ثم استخدام اليسار إلى الطريقة الصحيحة.

وأنا واثق من أنه لا مبالغة الآن ويمكنك الذهاب مع rindex

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