2011-09-13 6 views
0

を引用:パターンマッチは、私は、この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 

、それは動作しません。

私は、イベントが唯一のそれはまだ動作しません

select replace(myfielddata,'<sxyz lang="[a-zA-Z0-9_-]+" class="multilang">','') from mytable 

のように「エン」と一致するために必要最小限にこれをダウンペアました。

私は、文字列

select replace(myfielddata,'<sxyz lang="en" class="multilang">','') from mytable 

の完全一致を行いますが、それだけで考慮の間に表示される場合があります余分なスペースを取っていない場合は動作します唯一のもの。

助けてくださいRegEx gurus。

A.

答えて

1

MySQLはreplaceが唯一のリテラル文字列置換を行い、特に、only regular expression based matching、任意の正規表現ベースの代替機能を持っていません。

あなたがlocatesubstr(または似たような)と、それを苦労して行う必要があるでしょう:

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> | 
+---------------------+ 

あなたはもちろん、あなたがそれらを通じ置く前に、あなたの文字列が所望のパターンに一致することを確認したくなるでしょう上記の文字列manglerと正規表現を使用することができます。

-1

この

select replace(myfielddata,'<sxyz.*"multilang">','') 

または

select replace(myfielddata,'^<sxyz.*"multilang">$','') 
をお試しください
関連する問題