الفرق بين المراجعتين لصفحة: «PHP/preg match all»
Khaled-yassin (نقاش | مساهمات) أنشأ الصفحة ب'<nowiki><noinclude>{{DISPLAYTITLE:الدالة <code>preg_match_all()</code>...' |
Khaled-yassin (نقاش | مساهمات) طلا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الدالة <code>preg_match_all()</code> في PHP}}</noinclude> | |||
(PHP 4, PHP 5, PHP 7) | (PHP 4, PHP 5, PHP 7) | ||
تطابق الدالة preg_match_all() تعبيرًا نمطيًا بشكل شامل. | تطابق الدالة <code>preg_match_all()</code> تعبيرًا نمطيًا بشكل شامل. | ||
==الوصف== | |||
== الوصف == | <syntaxhighlight lang="php"> | ||
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) | int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) | ||
</syntaxhighlight>تبحث هذه الدالة في الموضوع <code>subject</code> عن جميع المتطابقات للتعبير النمطي المُعطى <code>pattern</code> وتضعهم في المصفوفة <code>matches</code> بالترتيب المحدد بواسطة <code>flags</code>. | |||
تبحث هذه الدالة في الموضوع subject عن جميع المتطابقات للتعبير النمطي المُعطى pattern وتضعهم في المصفوفة matches بالترتيب المحدد بواسطة flags. | |||
بعد العثور على أول متطابقة، ستستمر عمليات البحث التالية من نهاية المتطابقة الأخيرة. | بعد العثور على أول متطابقة، ستستمر عمليات البحث التالية من نهاية المتطابقة الأخيرة. | ||
==المعاملات== | |||
== المعاملات == | ===<code>pattern</code>=== | ||
=== pattern === | |||
النمط المراد البحث عنه، كسلسلة نصية. | النمط المراد البحث عنه، كسلسلة نصية. | ||
===<code>subject</code>=== | |||
=== subject === | |||
السلسلة النصية المُدخلة. | السلسلة النصية المُدخلة. | ||
===<code>matches</code>=== | |||
=== matches === | مصفوفة من جميع المتطابقات في مصفوفة متعددة الأبعاد مُرتّبة وفقًا للرايات <code>flags</code>. | ||
مصفوفة من جميع المتطابقات في مصفوفة متعددة الأبعاد مُرتّبة وفقًا للرايات flags. | ===<code>flags</code>=== | ||
يمكن أن تكون مزيجًا من الرايات التالية (لاحظ أنه من غير المنطقي استخدام <code>PREG_PATTERN_ORDER</code> مع <code>PREG_SET_ORDER</code>). | |||
=== flags === | ====<code>PREG_PATTERN_ORDER</code>==== | ||
يمكن أن تكون مزيجًا من الرايات التالية (لاحظ أنه من غير المنطقي استخدام PREG_PATTERN_ORDER مع PREG_SET_ORDER). | ترتيب النتائج بحيث تكون <code>$matches[0</code>] عبارة عن مصفوفة من تطابقات كاملة للنمط، و <code>$matches[1]</code> عبارة عن مصفوفة من السلاسل النصية المتطابقة مع النمط الفرعي الأول الموجود بين الأقواس، وهكذا.<syntaxhighlight lang="php"> | ||
==== PREG_PATTERN_ORDER ==== | |||
ترتيب النتائج بحيث تكون $matches[0] عبارة عن مصفوفة من تطابقات كاملة للنمط، و $matches[1] عبارة عن مصفوفة من السلاسل النصية المتطابقة مع النمط الفرعي الأول الموجود بين الأقواس، وهكذا. | |||
<?php | <?php | ||
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", | preg_match_all("|<[^>]+>(.*)</[^>]+>|U", | ||
"<b>example: </b><div align=left>this is a test</div>", | |||
" | |||
$out, PREG_PATTERN_ORDER); | $out, PREG_PATTERN_ORDER); | ||
echo $out[0][0] . ", " . $out[0][1] . "\n"; | echo $out[0][0] . ", " . $out[0][1] . "\n"; | ||
echo $out[1][0] . ", " . $out[1][1] . "\n"; | echo $out[1][0] . ", " . $out[1][1] . "\n"; | ||
?> | ?> | ||
</syntaxhighlight>سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | <b>example: </b>, <div align=left>this is a test</div> | ||
< | |||
example: , this is a test | example: , this is a test | ||
</syntaxhighlight>لذا، تحتوي المصفوفة <code>$out[0]</code> على مجموعة من السلاسل النصية التي تتطابق مع النمط الكامل، وتحتوي المصفوفة <code>$out[1]</code>على مجموعة من السلاسل النصية المحاطة بالوسوم. | |||
إذا احتوى النمط على نمط فرعي مُسمّى، فستحتوي المصفوفة <code>$matches</code> بشكل إضافي على عناصر للمفاتيح مع اسم النمط الفرعي. | |||
إذا احتوى النمط على نمط فرعي مُسمّى، فستحتوي المصفوفة $ | |||
إذا كان النمط يحتوي على نمط فرعي مُسمّى مكرر، يُحتفظ بالنمط الفرعي الموجود في أقصى اليمين في <code>$match[NAME]</code>.<syntaxhighlight lang="php"> | |||
<?php | <?php | ||
preg_match_all( | preg_match_all( | ||
'/(?J)(?<match>foo)|(?<match>bar)/', | '/(?J)(?<match>foo)|(?<match>bar)/', | ||
'foo bar', | 'foo bar', | ||
$matches, | $matches, | ||
PREG_PATTERN_ORDER | PREG_PATTERN_ORDER | ||
); | ); | ||
print_r($matches['match']); | print_r($matches['match']); | ||
?> | ?> | ||
</syntaxhighlight><code>PREG_SET_ORDER</code> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | ||
Array | Array | ||
( | ( | ||
[0] => | |||
[0] => | |||
[1] => bar | [1] => bar | ||
) | ) | ||
</syntaxhighlight>ترتيب النتائج بحيث تكون <code>$matches[0]</code> عبارة عن مصفوفة من أول مجموعة من التطابقات، و <code>$matches[1]</code> عبارة عن مصفوفة من ثاني مجموعة من التطابقات، وهكذا.<syntaxhighlight lang="php"> | |||
ترتيب النتائج بحيث تكون $matches[0] عبارة عن مصفوفة من أول مجموعة من التطابقات، و $matches[1] عبارة عن مصفوفة من ثاني مجموعة من التطابقات، وهكذا. | |||
<?php | <?php | ||
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", | preg_match_all("|<[^>]+>(.*)</[^>]+>|U", | ||
"<b>example: </b><div align=\"left\">this is a test</div>", | |||
" | |||
$out, PREG_SET_ORDER); | $out, PREG_SET_ORDER); | ||
echo $out[0][0] . ", " . $out[0][1] . "\n"; | echo $out[0][0] . ", " . $out[0][1] . "\n"; | ||
echo $out[1][0] . ", " . $out[1][1] . "\n"; | echo $out[1][0] . ", " . $out[1][1] . "\n"; | ||
?> | ?> | ||
</syntaxhighlight>سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | <b>example: </b>, example: | ||
<div align="left">this is a test</div>, this is a test | |||
< | </syntaxhighlight> | ||
====<code>PREG_OFFSET_CAPTURE</code>==== | |||
إذا مُرِرت هذه الراية، فستُعيد الدالةُ إزاحةَ السلسلة النصية المُذيلة أيضًا لكل تكرار للمتطابقة. لاحظ أن هذا يغير قيمة المصفوفة <code>matches</code> لمصفوفة من المصفوفات إذ يكون كل عنصر عبارة عن مصفوفة تتكون من السلسلة النصية المطابقة عند الفهرس 0 وإزاحة سلسلتها النصية في <code>subject</code> عند الفهرس 1.<syntaxhighlight lang="php"> | |||
==== PREG_OFFSET_CAPTURE ==== | |||
إذا مُرِرت هذه الراية، فستُعيد الدالةُ إزاحةَ السلسلة النصية المُذيلة أيضًا لكل تكرار للمتطابقة. لاحظ أن هذا يغير قيمة المصفوفة matches لمصفوفة من المصفوفات إذ يكون كل عنصر عبارة عن مصفوفة تتكون من السلسلة النصية المطابقة عند الفهرس 0 وإزاحة سلسلتها النصية في subject عند الفهرس 1. | |||
<?php | <?php | ||
preg_match_all('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE); | preg_match_all('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE); | ||
print_r($matches); | print_r($matches); | ||
?> | ?> | ||
</syntaxhighlight>سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | |||
Array | Array | ||
( | ( | ||
[0] => Array | |||
( | |||
[0] => Array | |||
( | |||
[0] => foobarbaz | |||
[1] => 0 | |||
) | |||
) | |||
[1] => Array | |||
( | |||
[0] => Array | |||
( | |||
[0] => foo | |||
[1] => 0 | |||
) | |||
) | |||
[2] => Array | |||
( | |||
[0] => Array | |||
( | |||
[0] => bar | |||
[1] => 3 | |||
) | |||
) | |||
[3] => Array | |||
( | |||
[0] => Array | |||
( | |||
[0] => baz | |||
[1] => 6 | |||
) | |||
) | |||
) | ) | ||
</syntaxhighlight><code>PREG_UNMATCHED_AS_NULL</code> | |||
إذا | إذا تم تمرير هذه الراية، تُعيد الأنماط الفرعية غير المطابقة القيمة NULL؛ خلاف ذلك تُعيد سلسلة نصية فارغة. | ||
إذا لم يُحدد راية ترتيب، فستُفترض الراية <code>PREG_PATTERN_ORDER</code>. | |||
== | ===<code>offset</code>=== | ||
يبدأ البحث عادةً من بداية السلسلة النصية الهدف. يمكن استخدام المعامل الاختياري <code>offset</code> لتحديد المكان البديل الذي تبدأ منه عملية البحث (بالبايت). | |||
== سجل التغيير == | ملاحظة: استخدام <code>offset</code> لا يعادل تمرير substr ($ subject، $offset) إلى الدالة <code>preg_match_all()</code> بدلاً من سلسلة الموضوع النصية، لأن النمط <code>pattern</code> يمكن أن يحتوي على تأكيدات مثل ^ ، $ أو ?<=x)). انظر <code>preg_match()</code> للحصول على أمثلة. | ||
==القيم المعادة== | |||
تُعيد الدالة عدد متطابقات النمط الكاملة (التي قد تكون صفرًا)، أو <code>FALSE</code> في حالة حدوث خطأ. | |||
==سجل التغيير== | |||
{| class="wikitable" | {| class="wikitable" | ||
| | !الإصدار | ||
| | !الوصف | ||
|- | |||
|7.2.0 | |||
|دعم <code>PREG_UNMATCHED_AS_NULL</code> للعامل <code>$flags</code> | |||
|- | |- | ||
|5.4.0 | |5.4.0 | ||
|أصبح المعامل matches اختياريًا. | |أصبح المعامل <code>matches</code> اختياريًا. | ||
|- | |- | ||
|5.3.6 | |5.3.6 | ||
|إعادة FALSE إذا كانت قيمة offset أكبر من طول subject. | |إعادة <code>FALSE</code> إذا كانت قيمة <code>offset</code> أكبر من طول <code>subject</code>. | ||
|- | |- | ||
|5.2.2 | |5.2.2 | ||
سطر 216: | سطر 144: | ||
|} | |} | ||
== أمثلة == | ==أمثلة== | ||
المثال 1: استخراج جميع أرقام الهواتف من بعض النصوص. | المثال 1: استخراج جميع أرقام الهواتف من بعض النصوص.<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", | |||
preg_match_all("/\(? | "Call 555-1212 or 1-800-555-1212", $phones); | ||
?> | ?> | ||
</syntaxhighlight>المثال 2: البحث عن وسوم HTML المتوافقة (دقيق) | |||
مثال على المرجع الخلفي. وهو يخبر pcre بأنه يجب أن يتطابق مع المجموعة الثانية من الأقواس في التعبير النمطي نفسه، والتي ستكون ([\w]+) في هذه الحالة. الشرطة المائلة العكسية الزائدة مطلوبة لأن السلسلة النصية محاطة بعلامات اقتباس مزدوجة.<syntaxhighlight lang="php"> | |||
مثال على المرجع الخلفي. وهو يخبر pcre بأنه يجب أن يتطابق مع المجموعة الثانية من الأقواس في التعبير النمطي نفسه، والتي ستكون ([\w]+) في هذه الحالة. الشرطة المائلة العكسية الزائدة مطلوبة لأن السلسلة النصية محاطة بعلامات اقتباس مزدوجة. | |||
<?php | <?php | ||
$html = "<b>bold text</b><a href=howdy.html>click me</a>"; | |||
$html = " | |||
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); | preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); | ||
foreach ($matches as $val) { | foreach ($matches as $val) { | ||
echo "matched: " . $val[0] . "\n"; | echo "matched: " . $val[0] . "\n"; | ||
echo "part 1: " . $val[1] . "\n"; | echo "part 1: " . $val[1] . "\n"; | ||
echo "part 2: " . $val[2] . "\n"; | echo "part 2: " . $val[2] . "\n"; | ||
echo "part 3: " . $val[3] . "\n"; | echo "part 3: " . $val[3] . "\n"; | ||
echo "part 4: " . $val[4] . "\n\n"; | echo "part 4: " . $val[4] . "\n\n"; | ||
} | } | ||
?> | ?> | ||
</syntaxhighlight>سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | matched: <b>bold text</b> | ||
part 1: <b> | |||
matched: | |||
part 1: | |||
part 2: b | part 2: b | ||
part 3: bold text | part 3: bold text | ||
part 4: </b> | |||
part 4: | |||
matched: <a href=howdy.html>click me</a> | matched: <a href=howdy.html>click me</a> | ||
part 1: <a href=howdy.html> | part 1: <a href=howdy.html> | ||
part 2: a | part 2: a | ||
part 3: click me | part 3: click me | ||
part 4: </a> | part 4: </a> | ||
</syntaxhighlight>المثال 3: استخدام النمط الفرعي | |||
يعمل هذا مع إصدار PHP 5.2.2 (PCRE 7.0) أيضًا وما يليه، ومع ذلك يوصى باستخدام النمط في المثال للتوافق مع الإصدارات السابقة.<syntaxhighlight lang="php"> | |||
يعمل هذا مع إصدار PHP 5.2.2 (PCRE 7.0) أيضًا وما يليه، ومع ذلك يوصى باستخدام النمط في المثال للتوافق مع الإصدارات السابقة. | |||
<?php | <?php | ||
$str = <<<FOO | $str = <<<FOO | ||
a: 1 | a: 1 | ||
b: 2 | b: 2 | ||
c: 3 | c: 3 | ||
FOO; | FOO; | ||
preg_match_all('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); | preg_match_all('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); | ||
print_r($matches); | print_r($matches); | ||
?> | ?> | ||
</syntaxhighlight>سوف تكون مُخرجات المثال أعلاه كالتالي:<syntaxhighlight lang="php"> | |||
سوف تكون مُخرجات المثال أعلاه كالتالي: | |||
Array | Array | ||
( | ( | ||
[0] => Array | |||
( | |||
[0] => a: 1 | |||
[1] => b: 2 | |||
[2] => c: 3 | |||
) | |||
[name] => Array | |||
( | |||
[0] => a | |||
[1] => b | |||
[2] => c | |||
) | |||
[1] => Array | |||
( | |||
[0] => a | |||
[1] => b | |||
[2] => c | |||
) | |||
[digit] => Array | |||
( | |||
[0] => 1 | |||
[1] => 2 | |||
[2] => 3 | |||
) | |||
[2] => Array | |||
( | |||
[0] => 1 | |||
[1] => 2 | |||
[2] => 3 | |||
) | |||
) | ) | ||
</syntaxhighlight> | |||
== انظر أيضًا == | ==انظر أيضًا== | ||
* أنماط PCRE. | *[[PHP/pcre pattern|أنماط PCRE]]. | ||
* الدالة preg_quote(): اقتباس حروف التعبير النمطي. | *الدالة <code>[[PHP/Preg quote|preg_quote()]]</code>: اقتباس حروف التعبير النمطي. | ||
* الدالة preg_match(): مطابقة تعبير نمطي. | *الدالة <code>[[PHP/preg match|preg_match()]]</code>: مطابقة تعبير نمطي. | ||
* الدالة preg_replace(): البحث عن تعبير نمطي واستبداله. | *الدالة <code>[[PHP/preg replace|preg_replace()]]</code>: البحث عن تعبير نمطي واستبداله. | ||
* الدالة preg_split(): تقسيم سلسلة نصية باستخدام التعبير النمطي. | *الدالة <code>[[PHP/preg split|preg_split()]]</code>: تقسيم سلسلة نصية باستخدام التعبير النمطي. | ||
* الدالة preg_last_error(): إعادة رمز الخطأ الخاص بتنفيذ آخر PCRE regex. | *الدالة <code>[[PHP/preg last error|preg_last_error()]]</code>: إعادة رمز الخطأ الخاص بتنفيذ آخر PCRE regex. | ||
==مصادر== | |||
== مصادر == | <span> </span> | ||
* صفحة الدالة preg_match_all في توثيق PHP الرسمي. | *[http://php.net/manual/en/function.preg-match-all.php صفحة الدالة preg_match_all في توثيق PHP الرسمي]. | ||
[[تصنيف:PHP]] | |||
[[تصنيف:PHP Function]] | |||
[[تصنيف:PHP PCRE]] | |||
[[تصنيف:PHP Regular Expressions]] |
المراجعة الحالية بتاريخ 22:54، 19 أبريل 2018
(PHP 4, PHP 5, PHP 7)
تطابق الدالة preg_match_all()
تعبيرًا نمطيًا بشكل شامل.
الوصف
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
تبحث هذه الدالة في الموضوع subject
عن جميع المتطابقات للتعبير النمطي المُعطى pattern
وتضعهم في المصفوفة matches
بالترتيب المحدد بواسطة flags
.
بعد العثور على أول متطابقة، ستستمر عمليات البحث التالية من نهاية المتطابقة الأخيرة.
المعاملات
pattern
النمط المراد البحث عنه، كسلسلة نصية.
subject
السلسلة النصية المُدخلة.
matches
مصفوفة من جميع المتطابقات في مصفوفة متعددة الأبعاد مُرتّبة وفقًا للرايات flags
.
flags
يمكن أن تكون مزيجًا من الرايات التالية (لاحظ أنه من غير المنطقي استخدام PREG_PATTERN_ORDER
مع PREG_SET_ORDER
).
PREG_PATTERN_ORDER
ترتيب النتائج بحيث تكون $matches[0
] عبارة عن مصفوفة من تطابقات كاملة للنمط، و $matches[1]
عبارة عن مصفوفة من السلاسل النصية المتطابقة مع النمط الفرعي الأول الموجود بين الأقواس، وهكذا.
<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
لذا، تحتوي المصفوفة $out[0]
على مجموعة من السلاسل النصية التي تتطابق مع النمط الكامل، وتحتوي المصفوفة $out[1]
على مجموعة من السلاسل النصية المحاطة بالوسوم.
إذا احتوى النمط على نمط فرعي مُسمّى، فستحتوي المصفوفة $matches
بشكل إضافي على عناصر للمفاتيح مع اسم النمط الفرعي.
إذا كان النمط يحتوي على نمط فرعي مُسمّى مكرر، يُحتفظ بالنمط الفرعي الموجود في أقصى اليمين في $match[NAME]
.
<?php
preg_match_all(
'/(?J)(?<match>foo)|(?<match>bar)/',
'foo bar',
$matches,
PREG_PATTERN_ORDER
);
print_r($matches['match']);
?>
PREG_SET_ORDER
سوف تكون مُخرجات المثال أعلاه كالتالي:
Array
(
[0] =>
[1] => bar
)
ترتيب النتائج بحيث تكون $matches[0]
عبارة عن مصفوفة من أول مجموعة من التطابقات، و $matches[1]
عبارة عن مصفوفة من ثاني مجموعة من التطابقات، وهكذا.
<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=\"left\">this is a test</div>",
$out, PREG_SET_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
<b>example: </b>, example:
<div align="left">this is a test</div>, this is a test
PREG_OFFSET_CAPTURE
إذا مُرِرت هذه الراية، فستُعيد الدالةُ إزاحةَ السلسلة النصية المُذيلة أيضًا لكل تكرار للمتطابقة. لاحظ أن هذا يغير قيمة المصفوفة matches
لمصفوفة من المصفوفات إذ يكون كل عنصر عبارة عن مصفوفة تتكون من السلسلة النصية المطابقة عند الفهرس 0 وإزاحة سلسلتها النصية في subject
عند الفهرس 1.
<?php
preg_match_all('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
Array
(
[0] => Array
(
[0] => Array
(
[0] => foobarbaz
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => foo
[1] => 0
)
)
[2] => Array
(
[0] => Array
(
[0] => bar
[1] => 3
)
)
[3] => Array
(
[0] => Array
(
[0] => baz
[1] => 6
)
)
)
PREG_UNMATCHED_AS_NULL
إذا تم تمرير هذه الراية، تُعيد الأنماط الفرعية غير المطابقة القيمة NULL؛ خلاف ذلك تُعيد سلسلة نصية فارغة.
إذا لم يُحدد راية ترتيب، فستُفترض الراية PREG_PATTERN_ORDER
.
offset
يبدأ البحث عادةً من بداية السلسلة النصية الهدف. يمكن استخدام المعامل الاختياري offset
لتحديد المكان البديل الذي تبدأ منه عملية البحث (بالبايت).
ملاحظة: استخدام offset
لا يعادل تمرير substr ($ subject، $offset) إلى الدالة preg_match_all()
بدلاً من سلسلة الموضوع النصية، لأن النمط pattern
يمكن أن يحتوي على تأكيدات مثل ^ ، $ أو ?<=x)). انظر preg_match()
للحصول على أمثلة.
القيم المعادة
تُعيد الدالة عدد متطابقات النمط الكاملة (التي قد تكون صفرًا)، أو FALSE
في حالة حدوث خطأ.
سجل التغيير
الإصدار | الوصف |
---|---|
7.2.0 | دعم PREG_UNMATCHED_AS_NULL للعامل $flags
|
5.4.0 | أصبح المعامل matches اختياريًا.
|
5.3.6 | إعادة FALSE إذا كانت قيمة offset أكبر من طول subject .
|
5.2.2 | قبول الأنماط الفرعية المسماة للصياغة (<name>?) و ('name'?) وكذلك (P?<name>). وكانت الإصدارات السابقة تقبل (P?<name>) فقط. |
أمثلة
المثال 1: استخراج جميع أرقام الهواتف من بعض النصوص.
<?php
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
?>
المثال 2: البحث عن وسوم HTML المتوافقة (دقيق) مثال على المرجع الخلفي. وهو يخبر pcre بأنه يجب أن يتطابق مع المجموعة الثانية من الأقواس في التعبير النمطي نفسه، والتي ستكون ([\w]+) في هذه الحالة. الشرطة المائلة العكسية الزائدة مطلوبة لأن السلسلة النصية محاطة بعلامات اقتباس مزدوجة.
<?php
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "matched: " . $val[0] . "\n";
echo "part 1: " . $val[1] . "\n";
echo "part 2: " . $val[2] . "\n";
echo "part 3: " . $val[3] . "\n";
echo "part 4: " . $val[4] . "\n\n";
}
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
matched: <b>bold text</b>
part 1: <b>
part 2: b
part 3: bold text
part 4: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: a
part 3: click me
part 4: </a>
المثال 3: استخدام النمط الفرعي يعمل هذا مع إصدار PHP 5.2.2 (PCRE 7.0) أيضًا وما يليه، ومع ذلك يوصى باستخدام النمط في المثال للتوافق مع الإصدارات السابقة.
<?php
$str = <<<FOO
a: 1
b: 2
c: 3
FOO;
preg_match_all('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
print_r($matches);
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
Array
(
[0] => Array
(
[0] => a: 1
[1] => b: 2
[2] => c: 3
)
[name] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => a
[1] => b
[2] => c
)
[digit] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
انظر أيضًا
- أنماط PCRE.
- الدالة
preg_quote()
: اقتباس حروف التعبير النمطي. - الدالة
preg_match()
: مطابقة تعبير نمطي. - الدالة
preg_replace()
: البحث عن تعبير نمطي واستبداله. - الدالة
preg_split()
: تقسيم سلسلة نصية باستخدام التعبير النمطي. - الدالة
preg_last_error()
: إعادة رمز الخطأ الخاص بتنفيذ آخر PCRE regex.
مصادر