سؤال

لدي regex أريد أن المباراة ضد مسار مثل ذلك:"C:\Documents and Settings\User\My Documents\ScanSnap\382893.pd~".أحتاج regex يطابق جميع المسارات باستثناء تلك التي تنتهي في '~' أو '.dat'.المشكلة أواجه هو أنني لا أفهم كيف يمكن أن مباراة ينفي السلسلة الصحيحة '.dat'فقط في نهاية المسار.أيأنا لا أريد أن المباراة {d,a,t} في مكان آخر في الطريق.

لقد شيدت باستخدام التعابير المنطقية ، ولكن يجب أن لا تتطابق .dat

[\w\s:\.\\]*[^~]$[^\.dat]

[\w\s:\.\\]* هذا يطابق كل الكلمات, بيضاء, القولون, فترات, و backspaces.[^~]$[^\.dat]$ هذا يسبب المباريات المنتهية في '~' أن تفشل.يبدو أنني يجب أن تكون قادرة على متابعة مع انتفى مباراة '.دات', ولكن المباراة فشل في regex اختبار.

أعتقد أن الجواب يكمن في تجميع انطلاقا من ما قرأت أن أحدهم لي نقطة في الاتجاه الصحيح ؟ وأود أن أضيف, أنا باستخدام ملف مشاهدة البرنامج الذي يسمح باستخدام التعابير المنطقية مطابقة لدي سطر واحد فقط لتحديد regex.

هذا يبدو دخول مماثلة: Regex لتتناسب مع سلاسل متعددة

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

المحلول

وترغب في استخدام سلبية نظرة الاخضر :

^((?!\.dat$)[\w\s:\.\\])*$

وبالمناسبة، مجموعة شخصيتك ([\w\s:\.\\]) لا يسمح تيلدا (~) في ذلك. هل تنوي السماح تيلدا في اسم الملف اذا لم يكن في النهاية؟ إذا كان الأمر كذلك:

^((?!~$|\.dat$)[\w\s:\.\\~])*$

نصائح أخرى

التالية باستخدام التعابير المنطقية:

^.*(?<!\.dat|~)$

يطابق أي سلسلة لا تنتهي مع '~' أو '.دات'.

^             # the start of the string
.*            # gobble up the entire string (without line terminators!)
(?<!\.dat|~)  # looking back, there should not be '.dat' or '~'
$             # the end of the string

في سهل الانجليزية: مباراة السلسلة فقط عندما تبحث وراء من نهاية السلسلة, لا يوجد sub-string '.دات' أو '~'.

تحرير: السبب الخاص بك المحاولة فشلت بسبب انتفى فئة حرف, [^...] فقط ينفي حرف واحد.فئة حرف دائما مباريات حرف واحد.حتى عندما كنت لا [^.دات] أنت لا يلغي السلسلة ".دات" ولكن كنت مطابقة حرف واحد بخلاف '.', 'd', 'a' أو 't'.

^((?!\.dat$)[\w\s:\.\\])*$

وهذا هو مجرد تعليق على إجابة اقتراح سابق:

و. ضمن فئة حرف، []، غير حرفي. ولا يحتاج الهرب.

^((?!\.dat$)[\w\s:.\\])*$

وأنا آسف لهذا المنصب كحل جديد، ولكني على ما يبدو لم يكن لديك ما يكفي من المصداقية لمجرد تعليق على إجابة حتى الآن.

وأعتقد كنت تبحث عن هذا:

[\w\s:\.\\]*([^~]|[^\.dat])$

والذي يرى، كما كان من قبل، كل حرف كلمة، المساحة البيضاء، نقاط (.)، مائلة إلى الوراء. ثم يطابق إما تيلدا (~) أو "دات" في نهاية السلسلة. قد تحتاج أيضا إلى إضافة الإقحام (^) في البداية إذا كنت تعرف أن السلسلة يجب أن يكون في بداية سطر جديد.

^[\w\s:\.\\]*([^~]|[^\.dat])$
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top