12/201708

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

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

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

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

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

テスト文章『abc def あいうえお カキクケコ ghi』

CASE1

正規表現『\s』

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

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

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

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

CASE2

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

置換後『』

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

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

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

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

CASE3

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

置換後『$1』

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

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

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

正規表現『(([^\x01-\x7E]))/s』も追加で設定すれば全角文字後の半角スペースも同様に殺せる

CASE4

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

置換後『$2$3』

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

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

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

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

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

あとがき

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

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

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

関連エントリー

VAIO Duo13のSSD換装

購入したのは Crucial社製のM.2SSD 250GB です。 とり...

2018/05/04
【JS】HighSlideに必要なコードを自動挿入【jQuery】

どうもこんにちは、うちのサイトではサムネイル表示の画像リンクにHighSlid...

2018/03/01
スリープから復帰したらタッチモニターがメインモニターに設定されている件

頭書通りの問題なんですけど。   まぁ前書きはどっかにおいておいて(実...

2017/10/10
SSL化予定

最近絵の記事が全くない御堂です。 てめぇ本当に絵描か? それはさておき...

2017/08/18
【右手デバイス】PCでのPSナビコンのBluetooth接続

世の中左手デバイスが多く出ているものの、右手デバイスとなるとプログラマブルテン...

2017/03/22
Windows10でXbox oneのコントローラでおかしな挙動を取る対処

いろいろイライラしてやってたんでスクショはとってないんだすまない。 Xbo...

2016/11/06

コメント

  • コメントはまだありません。

コメント登録

  • 閲覧制限 ※管理者のみにすると投稿者でも確認ができなくなります。

archive


×

ログイン