المعامل ‎=~‎‎ الخاص بالصنف Regexp في روبي

من موسوعة حسوب
< Ruby‏ | Regexp
مراجعة 14:55، 3 ديسمبر 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)، إذ يتحقق من تطابق تعبير نظامي مع سلسلة نصية.

مصادر