English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Ruby الأساسي

دليل Ruby المتقدم

التعبيرات النمطية في Ruby

التعبير العاديهو سلسلة من الحروف، يتم تحقيق أو البحث عن مجموعة من السلاسل عبر استخدام نمط به نحو خاص.

يُستخدم التعبير العادي لمجموعة معينة من الحروف المحددة، ومجموعات الحروف، لتكوين "سلسلة القاعدة"، ويُستخدم هذا السلسلة القاعدة لتقديم منطق تصفية للسلسلة.

النحو

التعبير العاديمن الناحية الفعلية هو نمط بين الشقين أو بين أي حرف تقسيم يتبعه %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 رائع