English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
التعبير العاديهو سلسلة من الحروف، يتم تحقيق أو البحث عن مجموعة من السلاسل عبر استخدام نمط به نحو خاص.
يُستخدم التعبير العادي لمجموعة معينة من الحروف المحددة، ومجموعات الحروف، لتكوين "سلسلة القاعدة"، ويُستخدم هذا السلسلة القاعدة لتقديم منطق تصفية للسلسلة.
التعبير العاديمن الناحية الفعلية هو نمط بين الشقين أو بين أي حرف تقسيم يتبعه %r، كما هو موضح أدناه:
/pattern/ /pattern/im # يمكن تحديد الخيارات %r!/usr/local! # استخدام حرف التقسيم
#!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
نتيجة التشغيل للعينة أعلاه:
Line1 contains Cats
قد يحتوي التعبير العادي على مزيج اختياري، يُستخدم للتحكم في جميع الجوانب من التحقق. يتم تحديد المزيج بعد الحرف الثاني من الشق، كما هو موضح في المثال أعلاه. يُظهر الجدول أدناه الممكنات المزيجات:
مزيج | الوصف |
---|---|
i | تجاهل الحروف الكبيرة والصغيرة عند تحقيق النص. |
o | تنفيذ التبديل #{} مرة واحدة فقط، يتم التحقق من التعبير العادي في المرة الأولى. |
x | تجاهل الفراغات، يُسمح بوضع فراغات وتعليقات في كل التعبير. |
m | تحقيق الأسطر المتعددة، يُعتبر الحرف النشط كحرف عادي. |
u,e,s,n | يُفسر التعبير العادي كـ Unicode(UTF-8)、EUC、SJIS أو ASCII. إذا لم يتم تحديد المزيج، يتم افتراض أن التعبير العادي يستخدم الترميز المصدر. |
مثل السلسلة التي تُفصل عبر %Q، يُسمح لـ Ruby باستخدام %r كبدء للتعبير العادي، يتبعه أي حرف تقسيم. هذا مفيد جدًا عند وصف عدد كبير من الحروف الشقية التي لا تريد التشغيل.
# تحقيق حرف الشق الواحد، دون التشغيل %r|/| # حرف العلامة يمكن تحقيقه عبر النحو التالي %r[</(.*)>]i
إلا الحروف التحكمية،(+ ? . * ^ $ ( ) [ ] { } | \)،جميع الأحرف الأخرى تطابق نفسها. يمكنك التغلب على الحروف التحكمية بوضع شرطة مائلة أمامها.
يُظهر الجدول أدناه السيناريوهات المتاحة من ناحية النصوص النمطية في Ruby.
النمط | الوصف |
---|---|
^ | تم التحقق من بداية السطر. |
$ | تم التحقق من نهاية السطر. |
. | تم التحقق من أي رمز وحيد غير موجود في الرمز الناتج عن الالتفاف. يستطيع أيضًا التحقق من الرمز الناتج عن الالتفاف عند استخدام خيار m. |
[...] | تم التحقق من أي رمز وحيد موجود في الكوخ. |
[^...] | تم التحقق من أي رمز وحيد غير موجود في الكوخ. |
re* | تم التحقق من التعبير الفرعي المسبق صفر مرة أو مرات متعددة. |
re+ | تم التحقق من التعبير الفرعي المسبق مرة واحدة أو مرات متعددة. |
re? | تم التحقق من التعبير الفرعي المسبق صفر مرة أو مرة واحدة. |
re{ n} | تم التحقق من التعبير الفرعي المسبق n مرة. |
re{ n,} | تم التحقق من التعبير الفرعي المسبق n مرة أو أكثر. |
re{ n, m} | تم التحقق من التعبير الفرعي المسبق على الأقل n مرة وأكثر من m مرة. |
a| b | تم التحقق من a أو b. |
(re) | تجميع النمط، وتتذكر النص المناسب. |
(?imx) | فتح خيار i، m أو x داخل النمط مؤقتًا. إذا كان في الأقواس، فإنه يؤثر فقط على الجزء داخل الأقواس. |
(?-imx) | إغلاق خيار i، m أو x داخل النمط مؤقتًا. إذا كان في الأقواس، فإنه يؤثر فقط على الجزء داخل الأقواس. |
(?: re) | تجميع النمط، ولكن لا تُتذكر النص المناسب. |
(?imx: re) | فتح خيار i، m أو x داخل الأقواس مؤقتًا. |
(?-imx: re) | إغلاق خيار i، m أو x داخل الأقواس مؤقتًا. |
(?#...) | التعليق. |
(?= re) | استخدام النمط لتعيين الموقع. بدون نطاق. |
(?! re) | استخدام النمط السلبي لتعيين الموقع. بدون نطاق. |
(?> re) | تم التحقق من النمط المستقل بدون تتبع. |
\w | تم التحقق من الرمز الحدوي. |
\W | تم التحقق من الرمز غير الحدوي. |
\s | تم التحقق من الرمز الفارغ. يعادل [\t\n\r\f]. |
\S | تم التحقق من الرمز غير الفارغ. |
\d | تم التحقق من الرمز الرقمي. يعادل [0-9]. |
\D | تم التحقق من الرمز غير الرقمي. |
\A | تم التحقق من بداية السلسلة. |
\Z | تم التحقق من نهاية السلسلة. إذا كان هناك رمز الالتفاف، يتم التحقق فقط من قبل الرمز الالتفاف. |
\z | تم التحقق من نهاية السلسلة. |
\G | تم التحقق من النقطة الأخيرة التي تم التحقق منها. |
\b | عندما يكون خارج الأقواس يتم التحقق من الحدوية، وعندما يكون داخل الأقواس يتم التحقق من الرمز العكسي (0x08). |
\B | تم التحقق من الرمز غير الحدوي. |
\n, \t, etc. | تم التحقق من الرمز الناتج عن الالتفاف، أو الرمز الناتج عن الرمز النقدي، أو الرمز الناتج عن الرمز المدمج، وما إلى ذلك. |
\1...\9 | تم التحقق من التعبير الفرعي المجموع للفئة n. |
\10 | إذا تم التحقق من التطابق، فتم التحقق من التعبير الفرعي المجموع للفئة n. وإلا يتم التوجيه إلى تمثيل الثمانية من قيمة الرمز الحرفي. |
المثال | الوصف |
---|---|
/ruby/ | التطابق مع "ruby" |
¥ | التطابق مع رمز Yen. يدعم Ruby 1.9 و Ruby 1.8 عدة رموز |
المثال | الوصف |
---|---|
/[Rr]uby/ | التطابق مع "Ruby" أو "ruby" |
/rub[ye]/ | تطابق مع "ruby" أو "rube" |
/[aeiou]/ | التطابق مع أي حرف صغير من الحروف الصغرى للهيئة البائية |
/[0-9]/ | التطابق مع أي رقم، مثل /[0123456789]/ |
/[a-z]/ | التطابق مع أي حرف صغير من ASCII |
/[A-Z]/ | التطابق مع أي حرف كبير من ASCII |
/[a-zA-Z0-9]/ | التطابق مع أي حرف في الأسهم المزدوجة |
/[^aeiou]/ | التطابق مع أي حرف غير الحروف الصغرى للهيئة البائية |
/[^0-9]/ | التطابق مع أي حرف غير رقم |
المثال | الوصف |
---|---|
/./ | التطابق مع أي حرف غير رمز الناتج عن السطر |
/./m | في الوضع المتعدد للسطر، يمكن أيضًا تطابق الرمز الناتج عن السطر |
/\d/ | التطابق مع رقم، أي /[0-9]/ |
/\D/ | التطابق مع غير رقم، أي /[^0-9]/ |
/\s/ | التطابق مع حرف فراغ، أي /[ \t\r\n\f]/ |
/\S/ | التطابق مع حرف غير فراغ، أي /[^ \t\r\n\f]/ |
/\w/ | التطابق مع حرف كلمة، أي /[A-Za-z0-9_]/ |
/\W/ | التطابق مع حرف غير كلمة، أي /[^A-Za-z0-9_]/ |
المثال | الوصف |
---|---|
/ruby?/ | التطابق مع "rub" أو "ruby". يعتبر "y" متاحًا أو غير متاح |
/ruby*/ | التطابق مع "rub" بالإضافة إلى 0 أو أكثر من "y" |
/ruby+/ | التطابق مع "rub" بالإضافة إلى 1 أو أكثر من "y" |
/\d{3}/ | التطابق مع 3 أرقام فقط |
/\d{3,}/ | التطابق مع 3 أو أكثر من أرقام |
/\d{3,5}/ | التطابق مع 3 أو 4 أو 5 أرقام |
سيطابق هذا التكرار الأقل
المثال | الوصف |
---|---|
/<.*>/ | التكرار الجشع: تطابق "<ruby>perl>" |
/<.*?>/ | التكرار غير الجشع: تطابق "<ruby>perl>" مع "<ruby>" |
المثال | الوصف |
---|---|
/\D\d+/ | بدون فرز: + تكرار \d |
/(\D\d)+/ | الفرز: + تكرار \D\d |
/([Rr]uby(, )?)+/ | تنطبق على "Ruby" و "Ruby, ruby, ruby"، إلخ |
سيطابق مرة أخرى مع المجموعة التي تم تطابقها مسبقًا.
المثال | الوصف |
---|---|
/([Rr])uby&\1ails/ | تطابق مع ruby&rails أو Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | النصوص الموجودة بين الأسهم أو الأقواس. \1 تطابق مع الأولى التي تم تطابقها،\2 تطابق مع الثانية التي تم تطابقها، وهكذا. |
المثال | الوصف |
---|---|
/ruby|rube/ | تطابق مع "ruby" أو "rube" |
/rub(y|le)/ | تطابق مع "ruby" أو "ruble" |
/ruby(!+|\?)/ | بعد "ruby" علامة تعجب واحدة أو أكثر أو علامة استفهام واحدة |
هذا يتطلب تحديد موقع التطابق.
المثال | الوصف |
---|---|
/^Ruby/ | تطابق مع النص الذي يبدأ بـ "Ruby" أو السطر |
/Ruby$/ | تطابق مع النص الذي ينتهي بـ "Ruby" أو السطر |
/\ARuby/ | تطابق مع النص الذي يبدأ بـ "Ruby" |
/Ruby\Z/ | تطابق مع النص الذي ينتهي بـ "Ruby" |
/\bRuby\b/ | تطابق مع الحد الكلمي للـ "Ruby" |
/\brub\B/ | \B هو الحد غير الكلمي: تطابق مع "rube" و "ruby"، ولكن لا تطابق مع "rub" بمفرده |
/Ruby(?=!)/ | إذا تبع "Ruby" علامة تعجب، فسيطابق مع "Ruby" |
/Ruby(?!!)/ | إذا لم يتبع "Ruby" علامة تعجب، فسيطابق مع "Ruby" |
المثال | الوصف |
---|---|
/R(?#comment)/ | تطابق مع "R". كافة الأحرف المتبقية هي تعليقات. |
/R(?i)uby/ | عند التطابق مع "uby" لا يهم الحالة. |
/R(?i:uby)/ | مثل السابق. |
/rub(?:y|le))/ | فقط المجموعات، دون إجراء \1 الاستدعاء العكسي |
sub و gsub وغيرها من المتغيرات البديلة sub! و gsub! هي طرق مهمة للغاية عند استخدام نماذج التحقق.
كل هذه الطرق تستخدم نماذج التحقق للبحث والتبديل.sub و sub! باستبدال الظهور الأول للمسار،gsub و gsub! باستبدال جميع الظهور للمسار.
sub و gsub يستعيد نصًا جديدًا، دون تعديل النص الأصلي، sub! و gsub! سيتم تعديلها عند استدعائها.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 #هذا هو الرقم الهاتفي" # حذف التعليقات في Ruby phone = phone.sub!(/#.*$/, "") puts "رقم الهاتف: #{phone}" # إزالة الأرقام غير المطلوبة phone = phone.gsub!(/\D/, "") puts "رقم الهاتف: #{phone}"
نتيجة التشغيل للعينة أعلاه:
رقم الهاتف: 138-3453-1111 رقم الهاتف: 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails هو rails، Ruby on Rails هو إطار Ruby رائع" # قم بتعديل جميع "rails" إلى "Rails" text.gsub!("rails", "Rails") # قم بتعديل جميع الكلمات "Rails" إلى الحروف الأولى كبيرة text.gsub!(/\brails\b/, "Rails") puts "#{text}"
نتيجة التشغيل للعينة أعلاه:
Rails هي إطار Ruby on Rails رائع