אתה נמצא כאן יסודות השפה  >>  ביטויים רגולריים - PCRE  >>  שימושים בביטויים רגולריים

שימושים בביטויים רגולריים

תפקידם של ביטויים רגולריים הוא ליצור תבנית חיפוש עבור צורות מסויימות של מחרוזות. PHP מספקת מספר פונקציות שמשתמשות בביטויים רגולריים, ועושות תפקידים חשובים כמו מציאת התאמה בין תבנית מסויימת למחרוזת, וכמו החלפת מחרוזת מסויימת במחרוזת אחרת.

הפונקציה preg_match() הינה פונקציה מאוד חשובה ב-PHP שמחפשת התאמה בין תבנית (ביטוי PCRE) לבין מחרוזת שעליה עורכים את החיפוש. ניתן דוגמא לשימוש בפונקציה זו, ונבדוק האם מחרוזת מסויימת מהווה כתובת אי-מייל חוקית. כתובת אי-מייל חוקית לא מכילה כלל רווחים, יש סימן @ אחד בלבד, והדומיין של כתובת האי-מייל מחולק לפחות ע"י נקודה אחת. אם כך, נבנה פונקציה שמקבלת מחרוזת כלשהי, ומחזירה TRUE במקרה שהמחרוזת מציינת כתובת אי-מייל חוקית, ו-FALSE אחרת:

<?php
  function IsValidEmailAddress($str)
  {
     if (preg_match("/^[\w\-\.]+\@[\w\-\.]+\.[\w\-]+$/i",$str)
/*מחפש תבנית של כתובת אי-מייל במחרוזת שקיבלנו.
אם נמצאה התאמה מוחזר 1, אחרת מוחזר 0.
*/
!=0)
        return true;
     return false;
  }
  
  echo "Email 1 is ".((IsValidEmailAddress("user-name1@domain.com"))?"valid":"not valid")."<BR>";
  echo "Email 2 is ".((IsValidEmailAddress("user-name2#domain.com"))?"valid":"not valid")."<BR>";
?>

הפונקציה preg_replace() היא פונקציה מאוד שימושית, שמחליפה מחרוזות מסויימות (לפי תבנית PCRE) במחרוזות אחרות. נביא כאן דוגמא שמחליפה את כל מחרוזות ה-URL בטקסט רגיל לקישורים פעילים ב-HTML. כתובות ה-URL שנחפש בטקסט יהיו כתובות, כלומר כתובות שמתחילות ב-"http://", ואנו נחליף את המחרוזת בקישור אקטיבי ב-HTML עם התג <A>. נכתוב פונקציה שמקבלת טקסט רגיל כלשהו, ומחזירה טקסט ב-HTML שבו הקישורים מצביעים לדפים הנכונים:

<?php
  function MakeActiveLinks($str)
  {
     $ret=preg_replace("/(^|[\W])(http:\/\/[\S]*)([\s]|$)/i"
/*תבנית החיפוש שאותה רוצים להחליף.
שים לב לתת-התבניות שתופסים!
*/
,"\\1<A href=\"\\2\">\\2</A>\\3"
/*תבנית ההחלפה שבה אנו מחליפים.
הייחוס החוזר בו נראה בצורה של \\2
ולא כמו ייחוס חוזר בתבנית חיפוש.
*/
,$str);
     return $ret;
  }
  
  $text="The PHP home site is: http://www.php.net\nThe manuals of PHP are located at: http://www.php.net/manual/\nYou may check them.";
  $active_text=MakeActiveLinks($text);
/*מחליפים את ה-URL-ים בטקסט הרגיל
לקישורים אקטיביים של HTML.
*/

  echo nl2br($active_text);
?>

נסו לחשוב על דרך לבצע את 2 הפונקציות הללו ללא PCRE. זה אומנם אפשרי, אך מאוד מאוד מסובך לעומת שורת קוד אחת בשימוש בפונקציות של PHP ובביטויים רגולריים. באמצעות ביטויים רגולריים ניתן לפשט דברים רבים נוספים, שיכולים להיות ממש ממש מסובכים בלעדיהם.


תגובות בנושא


לדף הקודםמודיפיקטורים -הקודם
לתחילת הדףלתחילת הדף
הבא- בחן את עצמךלדף הבא