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

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

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

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

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

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

    [mention]987[/mention]
    

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

    נתמך?

    dovidD תגובה 1 תגובה אחרונה
    0
    • chagoldC chagold

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

      [mention]987[/mention]
      

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

      נתמך?

      dovidD
      dovidD
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי
      #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
      • dovidD dovid

        @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 ?
        
        yossizY
        yossizY
        yossiz
        כתב ב נערך לאחרונה על ידי
        #3

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

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
        👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

        yossizY תגובה 1 תגובה אחרונה
        2
        • yossizY yossiz

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

          yossizY
          yossizY
          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
          • yossizY yossiz

            @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
            dovidD
            dovid
            ניהול
            כתב ב נערך לאחרונה על ידי
            #5

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

            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
            yossizY תגובה 1 תגובה אחרונה
            3
            • dovidD dovid

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

              yossizY
              yossizY
              yossiz
              כתב ב נערך לאחרונה על ידי 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 התייחס לנושא זה ב

              שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

              בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

              הרשמה התחברות
              תגובה
              • תגובה כנושא
              התחברו כדי לפרסם תגובה
              • מהישן לחדש
              • מהחדש לישן
              • הכי הרבה הצבעות


              בא תתחבר לדף היומי!
              • התחברות

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

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