טיפים באינדייין - סוגריים בתוך סוגריים

בעיית סוגריים בתוך סוגריים – הפתרון

לפני שנתייחס לסוגריים בתוך סוגריים, נכתוב כאן קודם כל איך מוצאים את כל הסוגריים במסמך על מנת להחיל עליהם סגנון שונה. (אני למשל אוהב לתת לסוגריים סגנון תו שהעיצוב היחיד שלו הוא הקטנה של רוחב וגובה האות ל-70%. זה מתאים בעיקר בספרים שבהם הסוגריים אינם חלק ישיר מהטקסט, אלא מראי מקומות והערות במאמר מוסגר).

אמנם רבים כבר יודעים את זה, אך מכיוון שזו שאלה שאני נשאל שוב ושוב, מסתבר שיש גם רבים שלא יודעים.

אפשר למצוא סוגריים באמצעות חיפוש GREP פשוט (או סגנון GREP אם רוצים)

חלונית GREP עם קוד לאיתור טקסט בסוגריים

כדי להבין את החיפוש נפרק את המחרוזת (שבתמונה היא משמאל לימין)

\( – הלוכסן למעשה אומר לאינדיזיין להתייחס לסימן פתיחת הסוגריים שבא בעקבותיו כפי שהוא באמת – פתיחת סוגריים. (ללא הלוכסן, אינדיזיין תחשוב שמדובר בקוד של הGREP שמגדיר קבוצה)

. – הנקודה מייצגת תו כלשהו

+ – סימן הפלוס בא לומר שיחפש את התו הקודם עוד פעמים (זאת אומרת שאם התו הקודם הוא “תו כלשהו”, הפלוס הופך את זה ל"תווים כלשהם")

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

\) – סגירת סוגריים.

עד כאן הכל נהדר. אך מה קורה אם יש לנו סוגריים בתוך סוגריים?

סוגריים משובשים

סימן השאלה שתפקידו לצמצם את המחרוזת, גורם לאינדיזיין למצוא תוצאה משובשת, אך גם בלעדי הסימן שאלה אי-אפשר, מכיוון שכאמור, הטקסט שיימצא הוא עד סוף הפיסקה (אמנם במקרה שהדגמתי זה בסדר, אך אם היה טקסט ממשיך אחרי הסוגריים האחרונים זה לא היה עוזר). אז מה עושים?

 

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

רקורסיה – תופעה שכל מופע שלה מכיל מופע נוסף שלה, כך שהיא מתרחשת ומשתקפת בשלמותה בתוך עצמה שוב ושוב.

ושם בהמשך:

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

כמו בכל דבר שקשור ל-GREP, גם כאן יש מספר דרכים להגיע לתוצאה הרצויה, אך אני בוחר לשים כאן את הביטוי שכתב יהודה נויפלד (הקוד נכתב משמאל לימין): ‭\(((?>[^()]+)|(?R))*\)

 

אהבתם את הטיפ? שתפו עם חברים!
אפשר גם לפרגן לי בכוס קפה...

מה דעתך על הטיפ?

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

אל תפספסו טיפים חדשים

הירשמו לניוזלטר וכך תקבלו התראה במייל בכל פעם שיעלה טיפ חדש

יש לכם שאלה באינדיזיין?

מוזמנים לקבוצת הוואצאפ!

מוצרים במיוחד בשבילך

Cover Builder PRO – מייצר פריסות לכריכה

₪ 299 כולל מע"מ

IndiSetUp – כלי עזר להגדרת אינדיזיין

המחיר המקורי היה: ₪ 472.המחיר הנוכחי הוא: ₪ 236. כולל מע"מ

אינדקס תורני – מפתח עניינים לפי סימנים וסעיפים

₪ 490 כולל מע"מ

Section Master – ניווט והחלת מקטעים ודפי אב

₪ 200 כולל מע"מ

אל תפספסו טיפים חדשים

הירשמו לניוזלטר וכך תקבלו התראה במייל בכל פעם שיעלה טיפ חדש