6

I would like to remove height property from all my images in my database. Their markup is as follows:

<img src="path/img.jpg" width="x" height="y" />

I was going to do something like this:

UPDATE jos_content SET introtext = REPLACE(introtext, 'height=".*"', '');

But I don't know how to use regular expressions in MySQL query. I did find out they exist, I just don't se how I can use them in this context.

0

1 Answer 1

8

Source

Try Below

DELIMITER $$
CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))

RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$
DELIMITER ;

And Run your Update query as

UPDATE jos_content SET introtext = regex_replace('height=".*"', 'height=""',introtext);
Sign up to request clarification or add additional context in comments.

5 Comments

why REPLACE( and not regex_replace( ?
@Sharky I have made change...
It worked! But what a behemoth of a function. I thought using regex in mysql was as easy as 123.
I'm a little confused about how this works. The way I'm reading it, this loops through one character at a time and checks the regex against each individual character. So it checks to see if the letter 'h' matches the regex of height=".*", which of course it doesn't - so how could this work? I must be missing something.
this not work exactly as regex replace because the amount of characters matching can be different there is no logic doing that in this code. when i tested i specifically added ^ to match only beginning of the string but it still replace the numbers at the end too.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.