سؤال

لقد عملت لمدة 5 سنوات بشكل رئيسي في جافا تطبيقات سطح المكتب الوصول إلى قواعد بيانات أوراكل و لم تستخدم التعبيرات العادية.الآن أدخل تجاوز سعة مكدس و أرى الكثير من الأسئلة حول لهم ؛ أشعر أنني فقدت شيئا.

لماذا استخدام التعبيرات العادية?

P. S.آسف لغتي الإنجليزية سيئة

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

المحلول

ينظر على سبيل المثال في روبي:

puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil?
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil?

فإن "/\d{3}-\d{4}/" هو التعبير العادي, و كما ترون هو عبارة موجزة جدا طريقة العثور على تطابق في سلسلة.

علاوة على ذلك, باستخدام مجموعات يمكنك استخراج المعلومات على هذا النحو:

match = /([^@]*)@(.*)/.match("myaddress@domain.com")
name = match[1]
domain = match[2]

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

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

نصائح أخرى

التعبيرات العادية (أو Regex) تستخدم نمط المباراة في السلاسل.يمكنك سحب جميع عناوين البريد الإلكتروني من قطعة من النص لأنه يتبع نمط معين.

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

/(bb|[^b]{2})/i

تحدثت يمكن قراءة "2 تكون أو لا تكون 2".

الجزء الأول هي (بين قوسين) ، يتم تقسيم الأنابيب | الشخصية التي يعادل أو بيان لذلك (a|b) مباريات "أ" أو "ب".النصف الأول من الأنابيب منطقة مباريات "bb".النصف الثاني اسم لا أعلم لكنه المعقوفتين ، وهي المباراة أي شيء لا "ب", لهذا السبب هناك سقف الرمز أيا (المصطلح) هناك.المتعرجة بين قوسين المباراة عدد من الأمور المعروضة عليها ، في هذه الحالة حرفين غير "ب".

بعد الثانية / هي "أنا" مما يجعل من قضية حساسة.استخدام بداية ونهاية مائلة هو بيئة محددة ، وأحيانا كنت تفعل في بعض الأحيان كنت لا.

اثنين من الروابط التي أعتقد أنك سوف تجد مفيد لهذا

  1. regular-expressions.info
  2. ويكيبيديا - التعبير العادي

أروع التعبير العادي من أي وقت مضى:

/^1?$|^(11+?)\1+$/

وهي تختبر إذا كان عدد الوزراء.و يعمل!!

N. B.:هو قليلا من الإعداد المسبق ؛ الرقم الذي نريد أن الاختبار يجب أن يتم تحويلها إلى سلسلة من "1"s أولا ، ثم يمكننا تطبيق التعبير لاختبار إذا كانت السلسلة لا لا تحتوي على عدد الوزراء من "1"s:

def is_prime(n)
  str = "1" * n
  return str !~ /^1?$|^(11+?)\1+$/ 
end

هناك ديتايليد و ودود للغاية التفسير في افيناش Meetoo بلوق.

إذا كنت ترغب في معرفة المزيد عن التعابير العادية ، أوصي اتقان التعبيرات العادية.يذهب كل في طريقه من المفاهيم الأساسية وصولا إلى الحديث عن كيفية محركات مختلفة تعمل تحت.آخر 4 فصول أيضا يعطي فصل مخصص لكل من PHP, .صافي, Perl, Java.لقد تعلمت الكثير من هذا و لا تزال تستخدم كمرجع.

إذا كنت بدأت للتو مع التعابير العادية ، أوصى أداة مثل Regex المدرب:

http://www.weitz.de/regex-coach/

أيضا سمعت أشياء جيدة عن RegexBuddy:

http://www.regexbuddy.com/

كما تعلمون, Oracle الآن التعبيرات العادية: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html.لقد استخدمت وظائف جديدة في عدد قليل من الاستفسارات ، ولكن ذلك لم يكن مفيدا كما في سياقات أخرى.السبب في اعتقادي هو أن التعابير العادية هي الأنسب لإيجاد البيانات المهيكلة دفن في البيانات غير المهيكلة.

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

التعبير المنتظم (regex أو regexp قصيرة) هو نص خاص سلسلة تصف نمط البحث.يمكنك التفكير في التعبيرات العادية كما البدل على المنشطات.وربما كنت على دراية البدل الرموز مثل *.txt العثور على جميع الملفات النصية في مدير الملفات.على regex يعادله ، .*\.txt$.

مورد كبير التعبيرات العادية: http://www.regular-expressions.info

هذه إعادة هي محددة Visual Studio C++ ولكن لقد وجدتها مفيدة في بعض الأحيان:

إيجاد كافة تواجدات "routineName" مع عدم التقصير params مرت:

routineName\(:a+\)

على العكس من ذلك إلى إيجاد كافة تواجدات "routineName" مع الإعدادات الافتراضية: routineName\(\)

للعثور على رمز تمكين (أو تعطيل) في بناء تصحيح:

\#إذا._DEBUG*

لاحظ أن هذا سوف التقاط جميع المتغيرات:ifdef ، إذا كان تعريف ifndef ، إذا !تعريف

التحقق من صحة كلمات مرور قوية:

هذا واحد سوف تحقق من صحة كلمة المرور بطول 5 إلى 10 alphanumerical الشخصيات ، مع حالة واحدة على الأقل العلوي ، واحدة أقل القضية رقم واحد:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top