در حال بارگزاری ...

ساخت یک برنامه ساده برای تست عبارات منظم در php

php
توسط مریم مهربان
آخرین به روز رسانی شنبه 16 آذر 1398

در این آموزش از لیداوب، نحوه ساخت یک برنامه کاربردی برای تست عبارات منظم (Regular Expression) را با هم مرور می‌کنیم.  اگر چه در حال حاضر، ابزارهای آنلاین بسیاری برای این کار وجود دارد، ام

در این آموزش از لیداوب، نحوه ساخت یک برنامه کاربردی برای تست عبارات منظم (Regular Expression) را با هم مرور می‌کنیم. 


اگر چه در حال حاضر، ابزارهای آنلاین بسیاری برای این کار وجود دارد، اما ساخت چنین برنامه کوچکی هم می‌تواند جالب باشد و هم تمرین خوبی برای تقویت برنامه نویسی با زبان PHP و همچنین کار با عبارات منظم محسوب می‌شود. این برنامه کاربردی، یک رشته را به عنوان داده و همچنین یک الگو را دریافت می‌کند و سپس با استفاده از تابع preg_match_all، بررسی می‌کند که آیا در رشته وارد شده، الگوی موردنظر وجود دارد یا خیر.

 ساخت یک برنامه ساده برای تست عبارات منظم در php

ایجاد یک فرم

پیش از هر کاری، باید یک فرم برای دریافت داده و الگوی مورد تست ایجاد کنیم. به همین منظور، یک فرم ایجاد کردیم که اطلاعات دریافتی را با متد post ، به اسکریپت preg_match_all.php ارسال می‌کند. در اسکریپت پردازش این فرم نیز با تابع preg_match_all بررسی می‌کنیم که آیا الگو موردنظر کاربر در رشته وارد شده وجود دارد یا خیر. اگر وجود داشته باشد، رشته‌های مطابقت داده شده به همراه متن وارد شده بازگردانده می‌شود:

<form action="preg_match_all.php" method="post">
  <textarea type="text" name="subject" cols="100" rows="5"><?php if (isset($subject)) echo htmlentities($subject); ?>
</textarea>
    <br>
    <strong>regular expression pattern</strong><br>
    <input name="pattern" type="text" size="100" value="<?php if ($pattern) echo $_POST['pattern']; ?>">
    <br>
    <br>
    <button type="submit">Preg Match All</button>
</form>

فرم مذکور به صورت زیر است که یک ناحیه متنی دارد که در آن رشته‌ای که قصد داریم جستجو را در آن انجام دهیم، وارد می‌کنیم و دومین ورودی، الگوی مورد جستجو است.

 

فرم دریافت عبارات منظم

 

 اسکریپ پردازش فرم

در قسمت زیر، تکه کد مورد استفاده برای پردازش فرم ارسال شده را مشاهده می‌کنید. این تکه کد در بالای کد html بالا قرار می‌گیرد.

<?php

$subject = isset($_POST['subject']) ? ($_POST['subject']) : '';
$pattern = isset($_POST['pattern']) ? ($_POST['pattern']) : '';

if (strlen($pattern) > 0) {
    preg_match_all('/' . $pattern . '/', $subject, $matches);
    foreach ($matches[0] as $match) {
        echo $match . '<br>';
    }
}

?>

در ابتدا، با یک عملگر سه گانه بررسی می‌شود که رشته وارد شده خالی نباشد. در غیر این صورت، متغیر موردنظر با یک رشته خالی مقداردهی می‌شود.

سپس، در یک ساختار if، با تابع strlen طول رشته ورودی بررسی می‌شود و اگر این اندازه، بیشتر از صفر باشد، تابع preg_match_all اجرا می‌شود. این تابع که تمام بخش‌هایی از متن را که با الگوی درخواست شده مطابقت دارد، بازمی‌گرداند، سه پارامتر می‌پذیرد. پارامتر اول، الگوی مورد جستجو و پارامتر دوم، رشته‌ای است که جستجو در آن انجام می‌شود. این رشته، همان رشته‌ای است که کاربر در ناحیه متنی وارد کرده است. سومین پارامتر، متغیری است که تمام رشته‌های مطابقت داده شده در آن قرار می‌گیرد. رشته‌های مطابقت داده شده با تابع preg_match_all در یک آرایه چند بعدی ذخیره می‌شود و به همین دلیل است که برای استخراج خروجی این تابع، مقادیر موجود در matches[0]$ را در قالب یک حلقه بر می‌شماریم.

<html>
<head>
    <meta charset="utf-8">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-latest.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
</head>

<body class="container">

<?php

$subject = isset($_POST['subject']) ? ($_POST['subject']) : '';
$pattern = isset($_POST['pattern']) ? ($_POST['pattern']) : '';

if (strlen($pattern) > 0) {
    preg_match_all('/' . $pattern . '/', $subject, $matches);
    foreach ($matches[0] as $match) {
        echo $match . '<br>';
    }
}

?>

<br>
<strong>Subject</strong><br>

<form action="preg_match_all.php" method="post">
  <textarea type="text" name="subject" cols="87" rows="5"><?php if (isset($subject)) echo htmlentities($subject); ?>
</textarea>
    <br>
    <strong>regular expression pattern</strong><br>
    <input name="pattern" type="text" size="89" value="<?php if ($pattern) echo $_POST['pattern']; ?>">
    <br>
    <br>
    <button type="submit">Preg Match All</button>
</form>
</body>
</html>

در ادامه دو مثال را با هم دنبال می‌کنیم. در هر دو نمونه، از رشته " .Do you know what 1 + 1 is equal to? {we will soon find out} [haha]" برای جستجوی الگو استفاده شده است.

در مثال اول از الگوی (?<={)[a-z]{2} برای جستجو استفاده کردیم. این الگو، به دنبال رشته‌های دو کاراکتری است که در بازه a-z قرار دارد و قبل از آن نیز کاراکتر "{" نوشته شده است.

کار با برنامه کاربردی تست عبارات منظم

الگوی دوم، رشته (?<![)[a-z]{4} است که طبق آن، به دنبال رشته‌هایی خواهیم بود که چهار کاراکتر در بازه a-z دارد و پیش از آن کاراکتر "]" قرار ندارد.

مطالعه بیشتر در لیداوب:

در نهایت، شما می‌توانید از برنامه کاربردی خود برای تمرین عبارات منظم استفاده کنید و لذت ببرید. به زودی با آموزش‌های جذاب دیگر باز می‌گردیم. پس در لیداوب با ما همراه باشید.

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
0.5 (2 رای)

   لطفا صبر کنید ...