REGEXP_REPLACE, השארת חלק מהערך
-
@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 ?
-
@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 -
-