الفرق بين المراجعتين ل"Ruby/String/sub"

من موسوعة حسوب
< Ruby‏ | String
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة. هذه الصفحة من مساهمات "كريم حبال".)
 
ط
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby String]]
 
[[تصنيف: Ruby String]]
يعيد التابع <code>sub</code> ب
+
يعيد التابع <code>sub</code> نسخة من السلسلة النصية التي استدعي معها مع تبديل قيمة محدَّدة مع أول تطابق للنمط المعطى.
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">sub(pattern, replacement) → new_str
 
<syntaxhighlight lang="ruby">sub(pattern, replacement) → new_str
 
sub(pattern, hash) → new_str
 
sub(pattern, hash) → new_str
sub(pattern) {|match| block } → new_str</syntaxhighlight>
+
sub(pattern) {|match| block } → new_str</syntaxhighlight>إن أعطيت كتلة <code>block</code> إلى التابع، فستُمرَّر السلسلة الحالية المتطابقة إليها وستعيَّن قيم متغيرات مثل <code>‎$1</code>، و <code>‎$2</code>، و <code>‎$`‎</code>، و <code>‎$&‎</code>، و <code>‎$'‎</code> بشكل مناسب. ستحل القيم التي تعيدها الكتلة مكان القيمة المتطابقة في كل استدعاء.
  
 +
== المعاملات ==
 +
 +
=== <code>pattern</code> ===
 +
يكون عادةً <nowiki/>[[Ruby/Regexp|تعبيرًا نمطيًّا]]. إن كان <nowiki/>[[Ruby/String|سلسلة نصية]]، فستُفسَّر أية محارف خاصة بالتعبيرات النمطية الموجودة فيها حرفيًّا؛ أي '‎\\d' سيطابق خط مائل عكسي يتبعه الحرف 'd' مباشرةً بدلًا من عددٍ.
 +
 +
=== <code>replacement</code> ===
 +
إن كان [[Ruby/String|سلسلة نصية]]، فسيحل مكان النص المتطابق. قد يحوي على مراجع خلفية (back-references) للمجموعات الملتقطة عبر النمط <code>pattern</code> مثل النموذج <code>"‎\d"</code> إذ <code>d</code> هو عدد المجموعة أو <code>"‎\k<n>‎"</code> إذ <code>n</code> هو اسم المجموعة. إن كان سلسلة نصية مقتبسة بعلامتي اقتباس مزدوجتين، يجب أن يُسبّق كلا المرجعين الخلفيين بخط مائل عكسي إضافي. على أي حال، لن تشير المتغيرات الخاصة بالمجموعات الملتقطة (المتطابقة) - مثل ‎<code>$&‎</code> - إلى العنصر الملتقط الحالي. 
 +
 +
إن كان هذا المعامل سلسلة نصية تبدو وكأنها مجموعة متطابقة لنمط ولكنها ليست مجموعة متطابقة لنمط مثل  <code>"‎\'‎"</code>، فيجب أن تُسبَق بخطين مائلين عكسيين مثل <code>"‎\'‎\"</code>.
 +
 +
===<code>hash</code>===
 +
[[Ruby/Hash|جدول Hash]]. إن مُرِّر كمعامل ثاني إلى التابع وكانت القيمة المتطابقة مساويةً لإحدى قيم مفاتيحه، فستُبدَل به القيمة المقابلة لهذا المفتاح. أي تُمثِّل تلك القيمة المقابلة سلسلة الاستبدال.
 
==القيمة المعادة==
 
==القيمة المعادة==
يعاد
+
تعاد نسخة من السلسلة النصية المعطاة مع تبديل القيمة <code>replacement</code> أو <code>hash</code> مكان أول تطابق فيها عبر <code>pattern</code>. سترث السلسلة النصية المعادة أي قيمة أو محارف فاسدة من السلسلة النصية الأصلية أو أية سلسلة استبدال معطية. 
  
 
==أمثلة==
 
==أمثلة==
سطر 21: سطر 33:
 
  #=> "Is /bin/bash your preferred shell?"</syntaxhighlight>
 
  #=> "Is /bin/bash your preferred shell?"</syntaxhighlight>
  
==انظر أيضا==
+
==انظر أيضًا==
 +
*التابع <code>[[Ruby/String/scrub|scrub]]</code>: يعيد نسخة عن السلسلة النصية التي استدعي معها مع استبدال البايتات غير الصالحة بمحرف محدَّد.
  
 +
*التابع <code>[[Ruby/String/replace|replace]]</code>: يستبدل محتوى السلسلة النصية التي استدعي معها بمحتوى السلسلة المُمرَّرة إليه.
 +
*التابع <code>[[Ruby/String/slice|slice]]</code>: يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/String.html#method-i-sub قسم التابع sub‎ في الصنف String في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/String.html#method-i-sub قسم التابع sub‎ في الصنف String في توثيق روبي الرسمي.]

مراجعة 19:04، 27 مارس 2019

يعيد التابع sub نسخة من السلسلة النصية التي استدعي معها مع تبديل قيمة محدَّدة مع أول تطابق للنمط المعطى.

البنية العامة

sub(pattern, replacement)  new_str
sub(pattern, hash)  new_str
sub(pattern) {|match| block }  new_str

إن أعطيت كتلة block إلى التابع، فستُمرَّر السلسلة الحالية المتطابقة إليها وستعيَّن قيم متغيرات مثل ‎$1، و ‎$2، و ‎$`‎، و ‎$&‎، و ‎$'‎ بشكل مناسب. ستحل القيم التي تعيدها الكتلة مكان القيمة المتطابقة في كل استدعاء.

المعاملات

pattern

يكون عادةً تعبيرًا نمطيًّا. إن كان سلسلة نصية، فستُفسَّر أية محارف خاصة بالتعبيرات النمطية الموجودة فيها حرفيًّا؛ أي '‎\\d' سيطابق خط مائل عكسي يتبعه الحرف 'd' مباشرةً بدلًا من عددٍ.

replacement

إن كان سلسلة نصية، فسيحل مكان النص المتطابق. قد يحوي على مراجع خلفية (back-references) للمجموعات الملتقطة عبر النمط pattern مثل النموذج "‎\d" إذ d هو عدد المجموعة أو "‎\k<n>‎" إذ n هو اسم المجموعة. إن كان سلسلة نصية مقتبسة بعلامتي اقتباس مزدوجتين، يجب أن يُسبّق كلا المرجعين الخلفيين بخط مائل عكسي إضافي. على أي حال، لن تشير المتغيرات الخاصة بالمجموعات الملتقطة (المتطابقة) - مثل ‎$&‎ - إلى العنصر الملتقط الحالي. 

إن كان هذا المعامل سلسلة نصية تبدو وكأنها مجموعة متطابقة لنمط ولكنها ليست مجموعة متطابقة لنمط مثل "‎\'‎"، فيجب أن تُسبَق بخطين مائلين عكسيين مثل "‎\'‎\".

hash

جدول Hash. إن مُرِّر كمعامل ثاني إلى التابع وكانت القيمة المتطابقة مساويةً لإحدى قيم مفاتيحه، فستُبدَل به القيمة المقابلة لهذا المفتاح. أي تُمثِّل تلك القيمة المقابلة سلسلة الاستبدال.

القيمة المعادة

تعاد نسخة من السلسلة النصية المعطاة مع تبديل القيمة replacement أو hash مكان أول تطابق فيها عبر pattern. سترث السلسلة النصية المعادة أي قيمة أو محارف فاسدة من السلسلة النصية الأصلية أو أية سلسلة استبدال معطية. 

أمثلة

مثال على استعمال التابع sub:

"hello".sub(/[aeiou]/, '*')                  #=> "h*llo"
"hello".sub(/([aeiou])/, '<\1>')             #=> "h<e>llo"
"hello".sub(/./) {|s| s.ord.to_s + ' ' }     #=> "104 ello"
"hello".sub(/(?<foo>[aeiou])/, '*\k<foo>*')  #=> "h*e*llo"
'Is SHELL your preferred shell?'.sub(/[[:upper:]]{2,}/, ENV)
 #=> "Is /bin/bash your preferred shell?"

انظر أيضًا

  • التابع scrub: يعيد نسخة عن السلسلة النصية التي استدعي معها مع استبدال البايتات غير الصالحة بمحرف محدَّد.
  • التابع replace: يستبدل محتوى السلسلة النصية التي استدعي معها بمحتوى السلسلة المُمرَّرة إليه.
  • التابع slice: يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.

مصادر