• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

REGEXP_REPLACE, השארת חלק מהערך

מתוזמן נעוץ נעול הועבר תכנות
6 פוסטים 3 כותבים 120 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC מנותק
    chagoldC מנותק
    chagold
    כתב ב נערך לאחרונה על ידי chagold
    #1

    האם REGEXP_REPLACE (שבשימוש mysql) תומך באפשרות של החלפת חלק מהמחרוזת שמעובדת ברג'קס?
    לדוגמא אם יש לי טקסט כזה:

    [mention]987[/mention]
    

    ואני רוצה לסנן את הmention ולהשאיר את ה987.

    נתמך?

    dovidD תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב לchagold ב נערך לאחרונה על ידי
    #2

    @chagold בהחלט.
    נסה ככה

    SELECT REGEXP_REPLACE(`columnWithBBcode`, "[([^]]+)]([^[]+)[\/\1]", "\2") FROM `TABLE`
    

    בדיקת הרג'קס: https://regex101.com/r/GmBaov/1

    אם זה עובד טוב והתוצאות משביעות רצון, שנה את המשפט לUPDATE:

    UPDATE `TABLE`
    SET `columnWithBBcode` = REGEXP_REPLACE(`columnWithBBcode`, "[([^]]+)]([^[]+)[\/\1]", "\2") 
    WHERE ?
    

    אפשר ליצור קשר dovid@tchumim.com

    yossizY תגובה 1 תגובה אחרונה
    3
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב לdovid ב נערך לאחרונה על ידי
    #3

    @dovid זה עבד לך?
    65044a42-7651-4f1c-b2bc-ca7f18043034-image.png

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    yossizY תגובה 1 תגובה אחרונה
    2
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב לyossiz ב נערך לאחרונה על ידי yossiz
    #4

    @yossiz אמר בREGEXP_REPLACE, השארת חלק מהערך:

    @dovid זה עבד לך?

    הבעיה הנ"ל נפתרת על ידי מילוט ככה:

    SELECT REGEXP_REPLACE('[mention]987[/mention]', "\[([^]]+)\]([^\[]+)\[\/\1\]", "\2")
    

    אבל זה לא עושה מה את המבוקש (כי mysql לא תומך ב-back references לא בחיפוש ולא בהחלפה)
    התוצאה:

    +----------------------------------------------------------------------------+
    | REGEXP_REPLACE('[mention]987[/mention]', "[([^]]+)]([^\[]+)[\/\1]", "\2") |
    +----------------------------------------------------------------------------+
    | [mention]987[/mention]                                                     |
    +----------------------------------------------------------------------------+
    1 row in set (0.01 sec)
    

    עריכה: יש באג מעצבן בפורום שהוא מסתיר לפעמים תווי backslash בקוד 😠

    הקוד של דוד עובד ב-mariadb כי הוסיפו שם אפשרות ל-back references
    זה צריך להיות כתוב ככה (אבל הפורום הורס את המילוט 😠 ) :

    SELECT REGEXP_REPLACE('[mention]987[/mention]', "^\[([^]]+)\]([^[]+)\[\\/\\1\]", "\\2");
    

    נותן תוצאה של 987

    הנה fiddle:
    https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=4c1225e23b4bd808022ed4351b77ef1d

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    dovidD תגובה 1 תגובה אחרונה
    2
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב לyossiz ב נערך לאחרונה על ידי
    #5

    @yossiz אין לי שום mysql שאוכל לבדוק.
    חיפשתי באינטרנט על תמיכת regex בmariadb וראיתי שזה מבוסס PCRE ועל פי זה כתבתי.

    אפשר ליצור קשר dovid@tchumim.com

    yossizY תגובה 1 תגובה אחרונה
    3
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב לdovid ב נערך לאחרונה על ידי yossiz
    #6

    @dovid אמר בREGEXP_REPLACE, השארת חלק מהערך:

    אין לי שום mysql שאוכל לבדוק

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0c10ca8ef1c8179ddff3e63c4e8e79b2
    https://www.db-fiddle.com/f/gCQfbswZysWNR1dKQgfeu5/0

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    3
  • chagoldC chagold התייחס לנושא זה ב

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.