読者です 読者をやめる 読者になる 読者になる

Web言語のお勉強~ど素人が往く~

かつてVB6を1年くらい触った事があるだけのど素人がWeb言語に挑戦します。勉強結果を随時発表します。

正規表現を使って「,」の内、前後が「"」(ダブルクォーテーション)ではない物を検索する表現 ,(?!")


正規表現

皆さん、正規表現使いこなしていますか?
私は使いこなせていません(^o^;
一時期取り組んだりしまして覚えたりしますが、時間が経つときれいさっぱり忘れています。

さて久々にそんな正規表現に取り組みます。
どうして取り組むかと言いますと、MySQLへのCSVファイルのインポートでエラーで引っかかる部分があって、それを別の文字に置換したいからです。

テーブルのカラム数とCSVのカラム数は一致しているはずなのに、インポートをすると・・・

f:id:MoneyReport:20150416185847p:plain

CSV 入力のカラム数が不正です (行: 1)

と言ってインポート途中で落ちてしまいます(-_-;
で、その行を削除して再度インポートするんですが、それが何度も発生すると偉い面倒くさいことに・・・。
この障害があるお陰で、昨年からのWEBサイト作成のデータ量が少ない状態でしか運用する事が出来ませんでした(;_;)

以前は時間がなかったのでとにかく、無理矢理エラー行を削除してはアップ、エラー行を削除してはアップ、という人力での頑張りで無理矢理やってました。
それを何とかしたくて正規表現にチャレンジです!

参考にさせて頂いたサイトは下記。
正規表現のサンプルが多数載っています。

正規表現サンプル集

正規表現サンプル集

CSVに含まれる「,」の内、前後が「"」(ダブルクォーテーション)ではない物を抽出したくて探していました。取りあえず後ろが「"」以外のを抽出する正規表現は ,(?!") になります。やったー!

2015/04/16 18:51

対象となるのは「,」半角カンマ

今回正規表現で抽出したいのは「,」半角カンマです。
CSVのカラムとカラムの間の区切り文字になっています。
これが間違ってカラムのデータ内に混在しているが故にエラーになっている事が最近の調査により判明しました!(自分での調査)
そこでカラムのデータ内にある「,」だけを除外したい訳です。
カラムデータは「""」半角ダブルクォーテーションで囲われています。
そしてカラム同士は「,」半角カンマで区切られています。

下記以外の組み合わせの「,」を抽出したい訳です。

","

そのためには下記が使えそうです!

f:id:MoneyReport:20150416190743p:plain

後ろが「ple」ではない「sam」


sam(?!ple)

という正規表現で「後ろが該当文字ではない、検索文字」を探す事が出来るようです。

という訳で「,」の内、後ろが「"」ではない文字を探す正規表現は・・・

 ,(?!")

になります!
これにて置換した後にCSVファイルをインポートしてみると・・・

f:id:MoneyReport:20150416185854p:plain

成功!
一件もインポートエラーが発生しなくなりました!
これで一気に作業スピードが上がります!

何とか今月中に目標データ量まで上げたいと思います!