Regexp: هل من الممكن البحث عن سلسلة "سلسلة" ولكن ليس "سلسلة ({"

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

  •  19-09-2019
  •  | 
  •  

سؤال

أحاول معرفة جميع الحدوث بكلمة ملموسة (استدعاء الأسلوب مع API المهملة) في جميع الملفات في دليل. أحتاج إلى regexp للعثور على جميع هذه الحوادث التي لا تحتوي على مكالمة محدثة (API الجديدة). هل يمكنك مساعدتي من فضلك؟

مثال:

  • تم إهمال API: الطريقة (أ، ب، ج)
  • API الجديدة: الطريقة ({a: a، b: b، c: c})

يجب أن تجد RegexP جميع الملفات التي تحتوي على "طريقة" ولكن ليس "طريقة ({".

شكرًا لك.

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

المحلول

أود أن أقول الطريقة الصحيحة هي استخدام المشغل السلبي للمتخرج، ?!

/method(?!\(\{)/

الدول المذكورة أعلاه، "أي حدوث method إنه ليس تليها ({"

يجتمع الاحتياجات الخاصة بك أفضل من المقترح /method([^{]/ كما الأخير لا يطابق نهاية السلسلة (أي abc abc method) ولا يتعامل مع مزيج شخصين ({ أنك طلبت بشكل جيد للغاية.

نصائح أخرى

betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

لشرح: [ ] يحدد فئة الأحرف - أي، يمكن أن تطابق الحرف في هذا الموضع أي شيء داخل الفصل.

ال ^ نظرا لأن الطابع الأول للفصل هو نفي: يعني أن هذه الفئة تطابق أي شخصية إلا الشخصيات المحددة في هذه الفئة.

ال { بالطبع هو الحرف الوحيد الذي نهتم به غير مطابق في هذه الحالة.

لذلك في بعض، سيؤدي ذلك إلى مطابقة أي سلسلة تحتوي على الشخصيات method( تليها أي شخصية إلا {.

هناك طرق أخرى يمكنك القيام بذلك بدلا من ذلك:

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w في هذه الحالة (على افتراض أن C Locale) يعادل [0-9A-Za-z]. وبعد إذا كنت ترغب في السماح بمساحة اختيارية، فيمكنك تجربة:

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

(في بناء جملة GREP، [:alnum:] is the same asW.;:الفراغ:refers to any whitespace character - this is represented asS في معظم تطبيقات Regex)

يمكنك استخدام فصول الشخصية لاستبعاد الآتي {, ، على سبيل المثال

/method\([^{]/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top