【正規表現】英文以外の半角スペースを排除

とある事情により、日本語英語混在の文で半角スペースを排除する正規表現を探していたんですけど、普通に\sだとすべての半角スペースに一致してしまうため、英文の半角スペースまで一致してしまうんですよね

今回やりたいのはあくまで日本語を含めた文での英文以外の半角スペースを排除することなので上記だとダメダナ(・×・)

というわけでいか試行錯誤の結果

答えだけ知りたけれはCASE4見ればいいよ

テスト文章

CASE1

正規表現『\s

置換後『』(ただ消すだけ)

結果『abcdefあいうえおカキクケコghi』

意味『\s → 半角スペース』

単純に半角スペースが全て死んだ

CASE2

正規表現『/s([^\x01-\x7E])

置換後『』

結果『abc defいうえおキクケコ ghi』

意味『([^\x01-\x7E]) → 全角文字』

とりあえず日本語()……というより全角文字(2byte文字)の前に半角スペースがあったら殺してみた。

結果としては全角文字の前の半角スペースをきちんと殺せたが、全角文字の最初も一緒に殺された。

CASE3

正規表現『/s(([^\x01-\x7E]))

置換後『$1

結果『abc defあいうえおカキクケコ ghi』

意味『$1 → ()内を変数化。数字は()の順番』

消えるなら消える部分だけ変数化して後からぶち込んでやればいいってことで全角文字部分を$で入力

CASE4

正規表現『(([^\x01-\x7E])\s|\s([^\x01-\x7E]))

置換後『$2$3

結果『abc defあいうえおカキクケコghi』

意味『(|) → or表現    $2と3になったのは←のorのせいで変数化の順番が増えた』

CASE3の2つを合わせて置換後を調整

これで全角文字の前後にある半角スペースのみを殺せるようになった。

『abc def』の間にある半角スペースは前後が全角文字じゃないので引っかからないのでそのまま。

あとがき

実は今まで$ってどうやって呼び出しているのか知らなかった人間です()

結構便利ですね。問答無用に()を変数化しているのを気をつけないと数が合わないとかいう初歩的な間違いをおかしそうですけど(´・ω・`)

あと正規表現のカテゴリどうしよう

コメント
※コメントは承認制となっていますので、コメントを頂いても直ぐには表示されません。
※不適切な内容(スパムや悪意ある内容等)のコメントは公開されませんので、ご了承ください。
※返信が必要な場合などでコメントの公開を通知されたい場合はメールアドレスの入力をお願いします。
名もなき名無しさん
メールアドレス(例:コメントの公開通知が欲しい場合)
内容