الفرق بين المراجعتين لصفحة: «Ruby/Regexp/3D~»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE: المعامل <code>=~</code> الخاص بالصنف <code>Regexp</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby | [[تصنيف: Ruby Operator]] | ||
[[تصنيف: Ruby Regexp]] | [[تصنيف: Ruby Regexp]] | ||
يبحث | يبحث المعامل <code>=~</code> عن تطابق تعبير نمطي ضمن سلسلة نصية. | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">rxp =~ str → integer or nil</syntaxhighlight> | <syntaxhighlight lang="ruby">rxp =~ str → integer or nil</syntaxhighlight>إذا تم استخدام المعامل <code>=~</code> مع تعبير نمطي حرفي له التقاطات مسماة (named captures)، فسيتم تعيين السلاسل الملتقطة (أو القيمة <code>nil</code>) في متغيرات محلية تحمل نفس أسماء الالتقاطات:<syntaxhighlight lang="ruby"> | ||
/(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = y " | |||
<syntaxhighlight lang="ruby"> | |||
p lhs #=> "x" | p lhs #=> "x" | ||
p rhs #=> "y" | p rhs #=> "y" | ||
</syntaxhighlight>إذا لم تكن هناك مطابقة، ستُعطى لتلك المتغيرات القيمة <code>nil</code>:<syntaxhighlight lang="ruby"> | |||
/(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = " | /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = " | ||
p lhs #=> nil | p lhs #=> nil | ||
p rhs #=> nil | p rhs #=> nil | ||
</syntaxhighlight>يُنفّذ التعيين في محلل (parser) روبي، إذ يرصد المحلل التعبير <code>'regexp-literal =~ expression'</code> لأجل التعيين. يجب أن يكون التعبير النمطي حرفيًا (literal)، وبدون تلقيم (interpolation)، وأن يوضع على الجانب الأيسر. | |||
لن تُنفّذ عملية التعيين إذا لم يكن التعبير النمطي حرفيًا.<syntaxhighlight lang="ruby"> | |||
re = /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ | re = /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ | ||
re =~ " x = y " | re =~ " x = y " | ||
p lhs # undefined local variable | p lhs # undefined local variable | ||
p rhs # undefined local variable | p rhs # undefined local variable | ||
</syntaxhighlight>كما أنّ تلقيم التعبير النمطي <code>#{}</code> سيلغي التعيين:<syntaxhighlight lang="ruby"> | |||
rhs_pat = /(?<rhs>\w+)/ | rhs_pat = /(?<rhs>\w+)/ | ||
/(?<lhs>\w+)\s*=\s*#{rhs_pat}/ =~ "x = y" | /(?<lhs>\w+)\s*=\s*#{rhs_pat}/ =~ "x = y" | ||
p lhs # undefined local variable | p lhs # undefined local variable | ||
</syntaxhighlight>ولن يحدث التعيين أيضًا إن وُضع التعبير النمطي على الجانب الأيمن:<syntaxhighlight lang="ruby"> | |||
" x = y " =~ /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ | |||
p lhs, rhs # undefined local variable | |||
</syntaxhighlight> | |||
==القيمة المعادة== | |||
يُعاد عدد يمثِّل بداية محرِّف أول مطابقة في السلسلة النصية str، أو تعاد القيمة <code>nil</code> إن لم يُعثَر على أي مطابقة. | |||
==أمثلة== | |||
أمثلة على استخدام المعامل <code>=~</code>: | |||
==انظر | <syntaxhighlight lang="ruby">/at/ =~ "input data" #=> 7 | ||
* | /ax/ =~ "input data" #=> nil | ||
</syntaxhighlight> | |||
==انظر أيضًا== | |||
* المعامل <code>[[Ruby/Regexp/case equality|===]]</code>: يعد معامل تساوي الحالة (Case Equality)، إذ يتحقق من تطابق تعبير نمطي مع سلسلة نصية. | |||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Regexp.html#method-i-3D~ قسم | *[http://ruby-doc.org/core-2.5.1/Regexp.html#method-i-3D~ قسم المعامل =~ في الصنف Regexp في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 05:46، 4 ديسمبر 2018
يبحث المعامل =~
عن تطابق تعبير نمطي ضمن سلسلة نصية.
البنية العامة
rxp =~ str → integer or nil
إذا تم استخدام المعامل =~
مع تعبير نمطي حرفي له التقاطات مسماة (named captures)، فسيتم تعيين السلاسل الملتقطة (أو القيمة nil
) في متغيرات محلية تحمل نفس أسماء الالتقاطات:
/(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = y "
p lhs #=> "x"
p rhs #=> "y"
إذا لم تكن هناك مطابقة، ستُعطى لتلك المتغيرات القيمة nil
:
/(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/ =~ " x = "
p lhs #=> nil
p rhs #=> nil
يُنفّذ التعيين في محلل (parser) روبي، إذ يرصد المحلل التعبير 'regexp-literal =~ expression'
لأجل التعيين. يجب أن يكون التعبير النمطي حرفيًا (literal)، وبدون تلقيم (interpolation)، وأن يوضع على الجانب الأيسر.
لن تُنفّذ عملية التعيين إذا لم يكن التعبير النمطي حرفيًا.
re = /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/
re =~ " x = y "
p lhs # undefined local variable
p rhs # undefined local variable
كما أنّ تلقيم التعبير النمطي #{}
سيلغي التعيين:
rhs_pat = /(?<rhs>\w+)/
/(?<lhs>\w+)\s*=\s*#{rhs_pat}/ =~ "x = y"
p lhs # undefined local variable
ولن يحدث التعيين أيضًا إن وُضع التعبير النمطي على الجانب الأيمن:
" x = y " =~ /(?<lhs>\w+)\s*=\s*(?<rhs>\w+)/
p lhs, rhs # undefined local variable
القيمة المعادة
يُعاد عدد يمثِّل بداية محرِّف أول مطابقة في السلسلة النصية str، أو تعاد القيمة nil
إن لم يُعثَر على أي مطابقة.
أمثلة
أمثلة على استخدام المعامل =~
:
/at/ =~ "input data" #=> 7
/ax/ =~ "input data" #=> nil
انظر أيضًا
- المعامل
===
: يعد معامل تساوي الحالة (Case Equality)، إذ يتحقق من تطابق تعبير نمطي مع سلسلة نصية.