ページ 11

正規表現で連続した数字を表現したい

Posted: 2015年3月28日(土) 13:02
by march3
お世話になります。

正規表現で0以上9以下の同じ数字が4連続するものを表現したい場合、愚直に

0000|1111|2222|3333|4444|5555|6666|7777|8888|9999

とすればできますが、格好悪いのでよりスマートな書き方がないか探しています。

0{4}|1{4}|2{4}|3{4}|4{4}|5{4}|6{4}|7{4}|8{4}|9{4}

より綺麗な書き方ってできないものでしょうか。

思いついた方は返信ください。
よろしくお願いいたします。

Re: 正規表現で連続した数字を表現したい

Posted: 2015年3月28日(土) 13:52
by a5ua

コード:

(\d)\1{3}
はいかがでしょうか?

Re: 正規表現で連続した数字を表現したい

Posted: 2015年3月28日(土) 15:22
by YuO
一応,.NET Frameworkのように,\dをUnicodeクラスNdと等価とするライブラリもあるため,注意が必要です。
このあたりは,ライブラリの仕様に依存します。
そもそもキャプチャ機能の有無,量指定子の有無がライブラリに依存しますが……。

ref) ideoneでの実行例 全角・半角形領域の数字に関しても\dがマッチしていることがわかる

Re: 正規表現で連続した数字を表現したい

Posted: 2015年3月28日(土) 22:34
by march3
a5ua さんが書きました:

コード:

(\d)\1{3}
はいかがでしょうか?
「後方参照」という便利なものがあるんですね。
多分これが一番スマートな気がします。
YuO さんが書きました:一応,.NET Frameworkのように,\dをUnicodeクラスNdと等価とするライブラリもあるため,注意が必要です。
このあたりは,ライブラリの仕様に依存します。
たしかに、ライブラリに限らず、正規表現を使えるツールでも同じ記述でもヒットしたりしなかったりしてハマることがありますね。
サクラエディタだと[^[0-9]]でもヒットしたけど
javascriptのsearchでは [^0-9] でないとヒットしない、とか。。。