84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
我有这样的需求:prodcuts_description 表里有很多多余的<br>标签,并且写法不一,如:<br />、<br>。要替换掉两个以上的空行(<br>标签),我只知道正则大概这么写:
prodcuts_description
<br>
<br />
(<br */*>\s*){2,}
MySQL应该怎么实现?
业精于勤,荒于嬉;行成于思,毁于随。
mysql的正则匹配用regexp,而替换字符串用REPLACE(str,from_str,to_str)
例如UPDATE myTable SET HTML=REPLACE(HTML,'<br>','') WHERE HTML REGEXP '(<br */*>\s*){2,}'
UPDATE myTable SET HTML=REPLACE(HTML,'<br>','') WHERE HTML REGEXP '(<br */*>\s*){2,}'
可是这么写会把所有<br>全部替换掉,因此干脆把REPLACE(HTML,'<br>','')改成REPLACE(HTML,substr(HTML,locate('<br><br>',HTML)+strlen('<br>'),strlen('<br>')),'') 这还不够,还得手动写多个'<br><br>'、'<br><br/><br/><br><br><br/>', 还不够,还得循环数次这些命令。。。。
关键的是,SQL语句无法实现正则匹配后取其中一部分的字符串来替换,所以你这里用sql实现是异常蛋疼的,干脆在程序里做正则替换,然后update吧。
mysql的正则匹配用regexp,而替换字符串用REPLACE(str,from_str,to_str)
例如
UPDATE myTable SET HTML=REPLACE(HTML,'<br>','') WHERE HTML REGEXP '(<br */*>\s*){2,}'
可是这么写会把所有<br>全部替换掉,因此干脆把REPLACE(HTML,'<br>','')改成REPLACE(HTML,substr(HTML,locate('<br><br>',HTML)+strlen('<br>'),strlen('<br>')),'')
这还不够,还得手动写多个'<br><br>'、'<br><br/><br/><br><br><br/>',
还不够,还得循环数次这些命令。。。。
关键的是,SQL语句无法实现正则匹配后取其中一部分的字符串来替换,所以你这里用sql实现是异常蛋疼的,干脆在程序里做正则替换,然后update吧。