我在MySQL DB中的列数据中盯着这个:
<sxyz lang="en" class="multilang">Encyclopedia</sxyz>
我需要像
一样Encyclopedia</sxyz>
切掉第一部分。现在我可以在两者之间有空格,我想说明这一点。
假设myfielddata是上面的字符串......
我试过了:
select replace(myfielddata,'<sxyz[[:space:]]+lang="[a-zA-Z0-9_-]+"[[:space:]]+class="multilang">','') from mytable
它不起作用。
我将事件配对到最低限度,以匹配“en”,只有
select replace(myfielddata,'<sxyz lang="[a-zA-Z0-9_-]+" class="multilang">','') from mytable
它仍然不起作用。
如果我完全匹配字符串
,唯一可行的方法select replace(myfielddata,'<sxyz lang="en" class="multilang">','') from mytable
但这并没有考虑到其间可能出现的任何额外空格。
请RegEx guru帮忙。
一个。
答案 0 :(得分:1)
MySQL没有任何基于正则表达式的替换函数,only regular expression based matching,特别是replace
只替换文字字符串。
你必须用locate
和substr
(或类似的东西)来做这件事:
mysql> select substr('<sxyz lang="en" class="multilang">Encyclopedia</sxyz>' from locate('>', '<sxyz lang="en" class="multilang">Encyclopedia</sxyz>') + 1) as truncated;
+---------------------+
| truncated |
+---------------------+
| Encyclopedia</sxyz> |
+---------------------+
当然,您需要确保字符串与所需的模式匹配,然后才能将它们放到上面的字符串管理器中,并且可以使用正则表达式。
答案 1 :(得分:-1)
试试这个
select replace(myfielddata,'<sxyz.*"multilang">','')
或
select replace(myfielddata,'^<sxyz.*"multilang">$','')