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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. REGEXP_REPLACE, השארת חלק מהערך

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

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