MySQLで正規表現置換を行うにはどうすればいいですか? 質問する

MySQLで正規表現置換を行うにはどうすればいいですか? 質問する

約 50 万行のテーブルがあり、varchar(255) UTF8 列filenameにファイル名が含まれています。

ファイル名からさまざまな奇妙な文字を削除しようとしています。文字クラスを使用することを考えました。[^a-zA-Z0-9()_ .\-]

さて、MySQL には正規表現を使用して置換できる関数がありますか? REPLACE() 関数に似た機能を探しています - 簡略化した例を以下に示します。

SELECT REPLACE('stackowerflow', 'ower', 'over');

Output: "stackoverflow"

/* does something like this exist? */
SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-'); 

Output: "-tackover-low"

私は知っている正規表現/RLIKEただし、これらは一致があるかどうかのみをチェックし、何が一致するかはチェックしません。

( PHP スクリプトから「 」を実行し、 を実行してから「 」を実行することもできますが、これは最後の手段で遅くて見苦しいハックのように見えます)SELECT pkey_id,filename FROM foo WHERE filename RLIKE '[^a-zA-Z0-9()_ .\-]'preg_replaceUPDATE foo ... WHERE pkey_id=...

ベストアンサー1

MariaDBまたはMySQL 8.0を使用している場合は、関数があります

REGEXP_REPLACE(col, regexp, replace)

見るMariaDB ドキュメントそしてPCRE 正規表現の強化

正規表現によるグループ化も使用できることに注意してください (非常に便利だと思います)。

SELECT REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '\\2 - \\1 - \\3')

戻り値

over - stack - flow

おすすめ記事