English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي PHP

دليل متقدم PHP

PHP و MySQL

دليل PHP

استخدام دالة PHP preg_match() ومثال

PHP تعبيرات النمط (PCRE)

يستخدم الدالة preg_match لتنفيذ مطابقة تعبير正ي.

النحو

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

البحث عن مطابقة بين subject والنمط المقدم كتعبير正ي.

شرح المعاملات:

  • $pattern: النمط الذي سيتم البحث عنه، في شكل نص.

  • $subject: النص المدخل.

  • $matches: إذا تم تقديم المعامل matches، سيتم ملؤه بالنواتج من البحث. سيكون $matches[0] يحتوي على النص المطابق بالكامل، $matches[1] سيكون يحتوي على النص المطابق لل捕获 المجموعة الأولى، وهكذا.

  • $flags: يمكن تعيين المعامل flags إلى القيم التالية:

  • PREG_OFFSET_CAPTURE: إذا تم تمرير هذا العلامة، سيتم إضافة عدد التغييرات إلى النسخة التي يتم إرجاعها عند كل ظهور، وسيكون لها علاقة بالنص المستهدف. ملاحظة: هذا سيغير التركيب إلى معامل matches، مما يجعله يتكون من عناصر تحتوي على النسخة المطابقة في العنصر الأول، وعنصر التغيير في العنصر الثاني، وهكذا.

  • offset: عادةً، البحث يبدأ من بداية النص المستهدف. يمكن استخدام المعامل offset لتعيين البداية من مكان معين في النص المستهدف (بونيتات البايت).

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

يتم إرجاع عدد مرات مطابقة النمط. سيكون هذا الرقم 0 مرة (لا تتطابق) أو 1 مرة، لأن preg_match() سيتوقف عن البحث بعد المطابقة الأولى. preg_match_all() يختلف عن ذلك، حيث سيستمر في البحث حتى نهاية النص. إذا حدث خطأ، فإن preg_match() سيعود FALSE.

مثال على الاستخدام

<?php
// يحدد حرف "i" بعد فاصلة العلامة الموجودة في النمط البحث غير الحساس بالحالة
if (preg_match("/php/i", "PHP هو لغة البرمجة المفضلة لتصميم الويب.")) {
    echo "تم العثور على النسخة المطابقة php.";
} else {
    echo "لم يتم العثور على النسخة المطابقة php.";
}
?>

النتائج التشغيلية كما يلي:

تم العثور على النسخة المطابقة php.

<?php
/* البارئمة الموجودة في النمط يحدد الحد الفاصل بين الكلمات، لذا سيتم مطابقة الكلمة المستقلة "web" فقط، وليس الكلمة مع الأخرى
 * جزء من الكلمة مثل "webbing" أو "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo "تم العثور على نص ملائم.\n";
} else {
    echo "لم يتم العثور على نص ملائم.\n";
}
if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo "تم العثور على نص ملائم.\n";
} else {
    echo "لم يتم العثور على نص ملائم.\n";
}
?>

النتائج التشغيلية كما يلي:

تم العثور على نص ملائم.
لم يتم العثور على نص ملائم.

<?php
// 从URL中获取主机名称
preg_match('@^(?:http://)?([^/]+)@i',
    "http://ar.oldtoolbag.com/index.html", $matches);
$host = $matches[1];
// 获取主机名称的后面两部分
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "اسم النطاق هو: {$matches[0]}\n";
?>

النتائج التشغيلية كما يلي:

اسم النطاق هو: oldtoolbag.com

<?php
$str = 'foobar: 2008';
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* 下面例子在php 5.2.2(pcre 7.0)或更新版本下工作, 然而, 为了后向兼容, 上面的方式是推荐写法. */
// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>

النتائج التشغيلية كما يلي:

مجموعة
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

PHP تعبيرات النمط (PCRE)