الفرق بين المراجعتين ل"Ruby/Regexp/3D~"

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

مصادر