עזרה בregex bbcode בתוך bbcode
-
אני צריך למצוא bbcode מסויימים בטקסט.
הקוד הזה ש@dovid הפנה אותי אליו מזהה את כל התוכן שבbbcode, אבל כיון שאני צריך מסויימים לכן עשיתי את זה , אבל הוא לא עובד בגלל שיש בפנים את התגית b.
איך אני יכול לכלול אותו?
תודהנ.ב. הבעיה נעוצה בכך שלא הבנתי את פיענוח הביטוי regex. לא הצלחתי לתרגם בין הכללים לקוד הנ"ל. עזרה בהסבר מסתמא תקדם אותי עוד יותר. תודה
-
-
-
-
-
@yossiz
פספסתי משהו בדוגמא. אני מתקן את השאלה.אני צריך ביטוי שתופס ומחזיר חזרה את החלק הפנימי נטו.
בדוגמא הזו כשבוחרים את group 2 הוא מחזיר (מציג) רק את החלק המוחלף דהיינו 987.
הבעיה מתחילה במקרה שיש bbcode פנימי, שאז הוא לא מחזיר את כל הבפנים, אלא מסלק את התגית (של ה-b) ומחזיר את הכותרת החיצונית (highlight) והפנימית ביותר (xxxxxx).
בפתרון שלך בהחלפה בודדת אז באמת הוא מחזיר את מה שאני צריך. אבל במקרה של הטקסט הארוך הוא לא נותן חזרה את מה שבין התגיות, אלא מוחק את הטקסט שברג'קס לגמרי.
תודה רבה רבה על הטרחה
-
@chagold אפשר יותר רקע?
כי מה שאתה מבקש בדיוק, קשה לממש בצורה שאתה מנסה (אאל"ט, אולי יש פה גורו ברגקס ( @dovid ?) שיתקן אותי)
להבנתי אתה מבקש החלפה יחידה ברג'קס ש:
- ילכד לתוך קבוצה כל המופעים של תבנית מסויימת
- יחליף את כל המחרוזת במה שנלכד לתוך הקבוצות
אני לא מכיר דרך כרגע לעשות את זה
אולי זה יעזור שתסביר יותר את הדרישה ולא נסיון המימוש שלך
אם השאלה היא בהמשך לשאלות קודמות, אז נראה שיש לך טקסט bbcode בעמודה ב-mysql ואתה רוצה בפונקציה יחידה לחלץ מתוכו רק את החלק שבין תגיות
highlight
?אתה ב-mariadb? כי ב-mysql אתה די מוגבל בפיצ'רים של רג'קס
-
עדכון:
אני עדיין לא בטוח שהבנתי את הדרישה בצורה נכונהאבל אם הבנתי נכון, חשבתי על פתרון די פשוט
במקום לחפש את המחרוזות הרצויות, מחפשים מה שלא רצוי ומוחקים אותוזה הרגקס שעשיתי:
/(^|\[\/highlight]).*?(\[highlight]|$)/sg
https://regex101.com/r/6sQK9Y/1
האם זה עונה על הצורך או שעדיין לא?
-
@yossiz אמר בעזרה בregex bbcode בתוך bbcode:
@chagold אפשר יותר רקע?
כי מה שאתה מבקש בדיוק, קשה לממש בצורה שאתה מנסה (אאל"ט, אולי יש פה גורו ברגקס ( @dovid ?) שיתקן אותי)
להבנתי אתה מבקש החלפה יחידה ברג'קס ש:
- ילכד לתוך קבוצה כל המופעים של תבנית מסויימת
- יחליף את כל המחרוזת במה שנלכד לתוך הקבוצות
אני לא מכיר דרך כרגע לעשות את זה
אולי זה יעזור שתסביר יותר את הדרישה ולא נסיון המימוש שלך
אם השאלה היא בהמשך לשאלות קודמות, אז נראה שיש לך טקסט bbcode בעמודה ב-mysql ואתה רוצה בפונקציה יחידה לחלץ מתוכו רק את החלק שבין תגיות
highlight
?אתה ב-mariadb? כי ב-mysql אתה די מוגבל בפיצ'רים של רג'קס
הרקע הוא כמו שכתבת עמודה בטבלה שעם הטקסט (ייבוא מפורום שבphpbb).
אני בmariadb.
לא צריך ללכוד את כל המופעים. מספיק פעם אחת, ולא נורא שאני יצטרך להריץ שוב ושוב בשביל כל המופעים (אחרי שמופע אחד מתוקן אז בהרצה הבאה הוא יקח כבר את הבא בתור).
את מה שנלכד אני צריך להחליף, אבל לזה אני כבר משתמש בפונקציית REGEXP_REPLACE (שפרמטר החיפוש בו הוא ביטוי הרג'קס). -
@yossiz בmariadb זה לא עובד
@dovid אמר בעזרה בregex bbcode בתוך bbcode:
@chagold הכי פשוט שתביא כמה דוגמאות של קלט וליד כל אחד התוצאה הרצויה לך בסופו של דבר (לא שלב ביניים).
זה הדוגמא, כשהפלט אמור להיות:
[highlight][b]אלא כדי שיהיו פנויין בתורה וחכמתה[/b][/highlight]
ו
[highlight][b] כדי שיזכו לחיי העולם הבא, כמו שביארנו בהלכות תשובה. [/b][/highlight]
עוד דוגמא:
טקסט מקורי:
abcd[highlight][b]987[/b][/highlight]efg
ואני צריך לקבל ביד את
[highlight][b]987[/b][/highlight]
עריכה: אחרי שאני מקבל את הנתון הזה, יבוא השלב הבא של להחליף את הטקסט בטקסט שלא כולל את התגיות של highlight. אבל את זה מקסימום אוכל לכאו' לבצע עם right/left/ substr.