عبارات با قاعده یا Regex در PHP

دی ۱۰, ۱۳۹۲ توسط : سعید

سلام دوستان

توی این باهم در موردعبارات باقاعده در php حرف میزنیم. اینکه چی هست ؟ از کجا اومده ؟ و چه کاربردی داره.

Regular Expression در لغت به معنی عبارات با قاعده است. این ابزار برای دستکاری رشته ها کاربرد داره. مثلا میخواین در رشته ای یک رشته دیگه رو پیدا کنید یا با یک رشته دیگه جایگزینش کنید و …

این ابزار در سال ۱۹۵۰ توسط Stephen Kleene ریاضیدان آمریکایی معرفی شد. بعد از اون در سیستم های مختلف به کار گرفته شد.

در نگاه اول به regex شاید به نظرتون ترسناک بیاد و تا به حال هیچ وقت باهاش کار نکرده باشد. اما وقتی که از این ابزار در برنامه نویسی استفاده میکنید میبینید که خیلی جاها به کمک تون میاد و با تمرین زیاد میتونید به regex مسلط شید.

توی این پست سعی میکنیم با مقدمات regex آشنا شیم. برای استفاده از این ابزار در php توابع زیر معرفی شدند :

preg_​filter
preg_​grep
preg_​last_​error
preg_​match_​all
preg_​match
preg_​quote
preg_​replace_​callback
preg_​replace
preg_​spli

که تمام این توابع از قوانین regex استفاده میکنن.

خب بیاین با معنی کاراکترهای این ابزار آشنا بشیم :

نتیجه

regex

پیدا کردن کلمه foo foo
شروع یک رشته با کلمه foo ^foo
پایان یافتن یک رشته با کلمه foo foo$
وقتی که خود کلمه foo در یک رشته باشد ^foo$
حرف c یا b یا a [abc]
تمام حروف از a تا z [a-z]
کارکترهایی که بزرگ نیستند [^A-Z]
پیدا کردن gif یا jpg (gif|jpg)
یک یا جند کلمه با حروف کوچک [a-z]+
اعداد ، نقطه و یا علامت منفی [۰-۹\.\-]
هر کلمه که حداقل یک حرف ، عدد یا آندرلاین داشته باشه ^[a-zA-Z0-9_]{1,}$
wy, wz, xy, یا xz ([wx])([yz])
هر کاراکتری به غیر از حروف و اعداد [^A-Za-z0-9]
سه حرف و چهار عدد ([A-Z]{3}|[0-9]{4})

 

تا اینجا ممکنه یه کم گیج شده باشید که چطور از این ابزار استفاده کنیم.
تابع preg_match در php یک رشته میگیره و اگر بر طبق الگوی مورد نظرباشه عدد ۱ رو برمیگردونه.
تابع زیر رو درنظر بگیرید :

if(preg_match(“/^[A-Za-z]+$/”, ‘phpro’)){
echo ‘Text only!’;
} else {
echo ‘Text and something else!’;
}
کد بالا با استفاده از تابع preg_match چک میکنه که آیا رشته مورد نظر فقط از حروف ( کوچک و بزرگ ) تشکیل شده یا عدد و بقیه کاراکترها هم داخلش هست .
از این تابع میتونید برای پیدا کردن یک رشته داخل رشته دیگه هم استفاده کنید. مثال زیر رو درنظر بگیرید :

if (preg_match(“/php/”, “phpor.ir”)) {
echo “String ‘phpro.ir’ contains ‘php'”;
} else {
echo “String ‘phpro.ir’ does not contain ‘php'”;
}

اگر میخواید که نسبت به حروف کوچک و بزرگ حساس نباشه میتونید از آپشن /i استفاده کنید :

if (preg_match(“/php/i”, “PHPor.ir”)) {
echo “String ‘phpro.ir’ contains ‘php'”;
} else {
echo “String ‘phpro.ir’ does not contain ‘php'”;
}

در ادامه چندتا مثال از کاربرد عبارات باقاعده میزنم تا با شکل کلی این ابزار بیشتر آشنا بشید.

البته چیزی که مهمه اینه که برای درک بیشتر باید تمرین زیادی داشته باشید تا با یک نگاه بتونید معنی عبارت چیه.

اعتبار سنجی ایمیل :

if (preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', $info@.com)) {
    echo $email . " is a valid email";
} else {
    echo $email . " is an invalid";
}

چک کردن فرمت تاریخ

if (preg_match("/^\d{4}-\d{2}-\d{2}$/", $date)) {
    echo $date . " date format is valid";
} else {
    echo $date . " date format is not valid";
}

چک کردن نام یک دامنه

class="brush: php; gutter: true">$url = "http://komunitasweb.com/"; if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) { echo "Your url is ok."; } else { echo "Wrong url."; }>

پیدا کردن تمام عسکهای موجود در صفحه HTML

$images = array();
preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media);
unset($data);
$data=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$media[0]);
foreach($data as $url)
{
	$info = pathinfo($url);
	if (isset($info['extension']))
	{
		if (($info['extension'] == 'jpg') ||
		($info['extension'] == 'jpeg') ||
		($info['extension'] == 'gif') ||
		($info['extension'] == 'png'))
		array_push($images, $url);
	}
}

چک کردن پیچیده بودن پسورد

'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'

موفق باشید

بازدید : ۹۲۶۵

دی ۱۱, ۱۳۹۲ @ ۱۱:۱۹ ق.ظ

خیلی خوب بود

پاسخ دادن
دی ۱۲, ۱۳۹۲ @ ۱:۲۵ ق.ظ

تشکر . عالی بودن

پاسخ دادن
دی ۲۱, ۱۳۹۲ @ ۹:۳۵ ب.ظ

سلام سایت خیلی خوبی دارید

میشه یه توضیح ساده در این مورد بدید برام

یکم این مبحث برام گنگه

این عبارات برای اعتبار سنجی رشته ها بکار میرن؟؟یا من اشتباه فهمیدم

پاسخ دادن
    سعید
    دی ۲۲, ۱۳۹۲ @ ۸:۴۸ ق.ظ

    سلام
    یکی از کارهایی که با عبارات با قاعده میشه انجام داد اعتبار سنجی رشته هاست.
    یکی دیگه از کارهاش جستجو در یک رشته است.

    پاسخ دادن
      دی ۲۲, ۱۳۹۲ @ ۸:۴۶ ب.ظ

      مرسی الان حداقل میدونم راجع به چیه یادگیریش برام آسون تر شد

      پاسخ دادن
بهمن ۱۱, ۱۳۹۲ @ ۱۰:۱۹ ق.ظ

سلام
Regex تو همه زبانهای برنامه نویسی به کار گرفته میشه و بسیار کاربردیه
آموزش خوبی بود خسته نباشی.

پاسخ دادن
تیر ۵, ۱۳۹۳ @ ۵:۳۵ ب.ظ

سلام دوست عزیز آموزش خوبی بود میشه یه مقدار در مورد این اعتبار سنجی ها توضیح بدید؟ممنون میشم….

پاسخ دادن
پرویز
آذر ۱۷, ۱۳۹۳ @ ۵:۱۹ ب.ظ

سلام ، با نمرین و تکرار حتما کار با قاعده ها را یاد می گیریم اما چطوری این کراکترهای های عجیب و غریب را حفظ کنیم. باتشکر

پاسخ دادن
    Saeed Moqadam
    آذر ۲۴, ۱۳۹۳ @ ۹:۱۰ ب.ظ

    اگه راهش رو فهمیدی به ما هم بگو

    پاسخ دادن
مرتضی (ملقب به mrtdeh)
دی ۲۴, ۱۳۹۳ @ ۸:۴۰ ب.ظ

BIG LIKE
خدا خیرت بده

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*