27-06-2008, 14:42
|
|
|
חבר מתאריך: 17.05.05
הודעות: 7,321
|
|
(PCRE) ביטוי רגולרי רקורסיבי למציאת לוכסנים אחוריים
אני מנסה כמה זמן לבנות ביטוי שימצא לי לוכסנים אחוריים בכפולות של 2, או שלא ימצא אותם כלל אבל עדיין יחזיר פסוק אמת.
כתבתי את זה:
כאשר הדגלים שלי הם:
הביטוי הנ"ל הוא רק חלק מביטוי גדול יותר, וה-back reference שהוא \\1 מתייחס ל-subpattern שאתם רואים לפניכם.
בינתיים, עד כמה שבדקתי, הביטוי עובד טוב כאשר יש לוכסנים. אבל כשאין לוכסנים זה פשוט מחזיר שהביטוי לא נמצא כלל (כאשר זה אמור למצוא את הביטוי, אפילו אם במחרוזת שבה מחפשים אין כלל לוכסנים אחוריים בכפולות של 2.)
למרות שניסיתי להיעזר באופרטור ? כדי שלמקרה שזה לא ימצא לוכסנים זה עדיין יחזיר פסוק אמת, זה לא מצליח.
לדוגמא, אני רוצה שזה ימצא:
קוד:
2 לוכסנים אחוריים:
\\
או 4 לוכסנים אחוריים:
\\\\
או 6 לוכסנים אחוריים:
\\\\\\
וכן הלאה, בכפולות של 2.
אבל אם אין לוכסנים - אז שכביכול הביטוי של מציאת הלוכסנים מבוטל כלא היה.
אני מניח שחלק גדול מהבעיה הוא דגל ה-Ungreedy, שאותו אני חייב להשאיר.
בנוסף, ניסיתי להיעזר ב-Recursive patterns (מוצגים בעמוד הבא למטה: http://www.php.net/manual/en/regexp.reference.php ) אבל כנראה זה לא נתמך בגירסת ה-PCRE שלי, או שזה נתמך אבל לא עובד (כפי שגיליתי שקרה למישהו אחר שניסה את ה-Recursive patterns).
יש למישהו רעיון?
תודה רבה!
|