التعبير العادي لاستبعاد مجموعة من الكلمات الرئيسية

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

  •  02-07-2019
  •  | 
  •  

سؤال

أريد تعبيرًا سيفشل عندما يواجه كلمات مثل "boon.ini" و"http".سيكون الهدف هو أخذ هذا التعبير والقدرة على البناء لأي مجموعة من الكلمات الرئيسية.

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

المحلول

^(?:(?!boon\.ini|http).)*$\r?\n?

(مأخوذ من RegexBuddyمكتبة 's) سيطابق أي سطر لا يحتوي على boon.ini و/أو http.هل هذا ما تريد؟

نصائح أخرى

تعبير بديل يمكن استخدامه:

^(?!.*IgnoreMe).*$

^ = يشير إلى بداية السطر
$ = يشير إلى نهاية السطر
(?! Expression) = يشير إلى صفر عرض، انظر للأمام، تطابق سلبي في التعبير

ال ^ هناك حاجة إلى في المقدمة، وإلا عند التقييم، يمكن أن تبدأ النظرة السلبية للأمام من مكان ما داخل/خارج نص "IgnoreMe" - وإجراء تطابق حيث لا تريده أيضًا.

على سبيل المثالإذا كنت تستخدم regex:

(?!.*IgnoreMe).*$

مع إدخال "Hello IgnoreMe Please"، سيؤدي ذلك إلى شيء مثل:"gnoreMe Please" نظرًا لأن النظرة السلبية للأمام تجد أنه لا توجد سلسلة كاملة "IgnoreMe" بعد "I".

بدلاً من إلغاء النتيجة ضمن التعبير، يجب عليك القيام بذلك في التعليمات البرمجية الخاصة بك.بهذه الطريقة، يصبح التعبير بسيطًا جدًا.

\b(boon\.ini|http)\b

سيعود true إذا كان boon.ini أو http في أي مكان في السلسلة الخاصة بك.لن يتطابق مع كلمات مثل httpd أو httpxyzzy بسبب \b, أو حدود الكلمات.إذا أردت، يمكنك فقط إزالتها وسوف تتطابق مع تلك أيضًا.لإضافة المزيد من الكلمات الرئيسية، ما عليك سوى إضافة المزيد من الأنابيب.

\b(boon\.ini|http|foo|bar)\b

قد يتم خدمتك جيدًا من خلال كتابة تعبير عادي من شأنه ذلك ينجح عندما يواجه الكلمات التي تبحث عنها، ثم قم بعكس الشرط.

على سبيل المثال، في لغة Perl ستستخدم:

if (!/boon\.ini|http/) {
    # the string passed!
}
^[^£]*$

التعبير أعلاه سوف يقيد رمز الجنيه فقط من السلسلة.سيسمح هذا لجميع الأحرف باستثناء السلسلة.

ما هي مكتبة اللغة/التعبير العادي؟اعتقدت أن سؤالك كان حول ASP.NET وفي هذه الحالة يمكنك رؤية قسم "النظرة السلبية" في هذه المقالة:http://msdn.microsoft.com/en-us/library/ms972966.aspx

بالمعنى الدقيق للكلمة، لا يزال نفي التعبير العادي يحدد اللغة العادية ولكن هناك عدد قليل جدًا من المكتبات/اللغات/الأدوات التي تسمح بالتعبير عنها.

قد يخدمك المظهر السلبي بنفس الطريقة ولكن بناء الجملة الفعلي يعتمد على ما تستخدمه.إجابة تيم هي مثال مع (?...)

لقد استخدمت هذا (استنادًا إلى إجابة Tim Pietzcker) لاستبعاد عناوين URL للنطاق الفرعي غير الإنتاجي لمرشحات الملف الشخصي في Google Analytics:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

يمكنك رؤية السياق هنا: Regex لاستبعاد كلمات متعددة

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