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

ריבוי כללי של תוים

  • אם נרצה רצף של בין חמישה לעשרה X-ים נאלץ לכתוב: ?XXXXXX?X?X?X?X .
    זוהי דרך לא אסטתית ולכן נשתמש בדרך הבאה:
    /{x{5,10/

  • /{,x{5/
    פירושו חמישה x -ים או יותר.

  • /{x{5/
    פירושו חמישה אקסים בלבד.

  • /{x{0,5/
    פירושו עד חמישה אקסים.
במידה ויכולות להתבצע שתי התאמות בביטוי אחד, הכלל החמדני יפעל על פי העקרון:
השמאלי יותר חמדני יותר. לדוגמא:

$_="a xxx c xxxxxxx c xxx d";
/a.*c.*d/;
/*הביטוי הרגולרי שיחפש התאמה על המחרוזת*/

במקרה זה, ה "*." הראשון בביטוי הרגולרי יתאים לכל התוים שיימצאו בין ה a לבין ה c השני.
זאת למרות שגם יכולה להתבצע התאמה רק עד ה- c הראשון.
במקרה הבא זה יהיה קריטי:

$_="a xxx ce xxxxxxx ci xxx d";
/a.*ce.*d/;
/*הביטוי הרגולרי */

כאן ה "*." מתאימה ל c הראשון וגם לשני ותבוצע התאמה ל c השני כי הוא "בולע" יותר תוים על פי עקרון החמדנות, אך לא תבוצע התאמה בין ה- e בביטוי הרגולרי ל i במחרוזת, במקרה זה יהיה לנו אוטומטית back tracing חזרה לאחור ונעבור שלב אחד יותר "מוקדם" בו בוצעה ההתאמה ל c הראשון, זה עלול לעלות לנו בסיבוכיות זמן הריצה ולהאריכה.
בסופו של דבר תתקבל תוצאה נכונה - ההתאמה לה קיווינו אך לא בזמן לו ייחלנו.









להוספת תגובה, אנא התחברו לדרכונט.