ריבוי כללי של תוים
-
אם נרצה רצף של בין חמישה לעשרה 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
הראשון, זה עלול לעלות לנו בסיבוכיות זמן הריצה ולהאריכה.
בסופו של דבר תתקבל תוצאה נכונה - ההתאמה לה קיווינו אך לא בזמן לו ייחלנו.
להוספת תגובה, אנא התחברו לדרכונט.