^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$
(出典:https://www.javadrive.jp/regex-basic/sample/index4.html)
0~255を判定している部分は置いといて、0~255を判定する記述が二つに分かれているのが気になる。
間に"."が挟まるからだ。
IPアドレスでは先頭に"."があってもおかしいし、末尾に"."があってもおかしい。
そのため、まずipアドレスの先頭三組("0~255".)だけドット付きで判定し、最後の一つだけドットなしで判定させている。
しかしそれなら、間に"."が挟まっても挟まらなくてもどっちでもマッチするように書いたあと、
その後、マッチした文字列の全体のフォーマットが正しいかを判定すればいいのではないか?
例えば以下のように。
^(?=^(\d+\.){3}\d+$)((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.?){4}$
0~255を判定する部分が一つになっている。にもかかわらず末尾に"."がついてしまうパターンがマッチしないのは
(または、途中の組で"."がつかないパターンがマッチしないのは)、
先読みで正しいフォーマットだけにマッチするようにして、それ以外の文字列をはじいているからだ。
正規表現が単純に短くなったし、「全体のフォーマットを判定する先読み部」と「各8bit+"\.?"の複雑な判定部分」に分けて描くことができた為、
先読みを使うことで、判定対象となる文字列の、「各部分判定の複雑さ」と「全体のフォーマットの判定の複雑さ」を分けることができる。
次に、0~255判定も複雑になっている。
正規表現では"0以上255以下"のような、複数桁にまたがる数の大小判定は出来ない。
例えば"2"と"10"では、数としては当然"10"が大きいが、辞書順で考えれば"2"の方が後に来る。
つまり、辞書順に並んだ文字列の中から、0~255の範囲だけにマッチするような正規表現を書かないといけない。そのため複雑になる。
しかし、0~255のような複数桁にまたがる数の大小判定ができないとしても、
全ての0~255に当てはまる厳密なパターンを書く((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))より、
ある程度絞れる範囲だけ書いた後、除外したいパターンを書いて弾いた方が、読みやすく、意図が理解しやすくなるのではないか?
例えは以下のように。
^(?![3-9]\d\d)(?!2[6-9]\d)(?!25[6789])(?!0\d)\d{1,3}$
まず、上記正規表現末尾の\d{1,3}で、1~3桁のあらゆる数字列にマッチする。
するように記述されている。
「元々の0~255判定部分より複雑じゃん」と言われればそうなのだが、読み方が異なっている。
元々の正規表現は、
「250以上255以下、または、240以上249以下、または、100以上199以下、または、0~99」という読み方になる。
「3桁の数字列にマッチする、かつ、300以上999以下を除外、かつ、260以上299以下を除外、かつ、256以上259以下を除外、かつ、先頭が"0"の2ケタ以上の数字列を除外」という読み方になる。
個人的な意見になるが、「~、または、~」の連言では、「対象となる範囲の全体感と、除外されるべきパターン」が見えないため、どういった範囲の話をしているのかがピンとこない(場合もある)。
一方、「~、かつ、~~を除外」では、「対象となる範囲の全体感と、除外されるべきパターン」がそのまま書かれているため、対象文字列のどの部分のことを言及しているのか(比較的)理解しやすい(、と言いたい)。
ちょっと無理がある言い方か。
二つの変更を組み合わせたIPアドレス(IPv4)を判定する正規表現は以下になる。
^(?=^(\d+\.){3}\d+$)((?![3-9]\d\d)(?!2[6-9]\d)(?!25[6789])(?!0\d)(\d{1,3})\.?){4}$
"(?=..."や、"(?!..."で始まる部分は、「除外または許可されるべきパターンを指定している部分」であり、文字マッチを行っていない。
先読み部分を無視して、文字とマッチする部分だけに注目すると、この正規表現がマッチしようとしている文字列の全体感が把握できる。
((\d{1,3})\.?){4}
んなこたあない
それなりにネットをやってればみんな「逆張り論破マン」って、これ以上でも以下でもない、いたって正確な評価をしていたと思うぞ?
俺もすっげえ迷惑してるしな 勝手に人生に参加させられて本当に困ってるし、できることならマジでやめてほしかったけど、どうしようもなかった
生まれざるを得なかった
残念ながら、子供欲しいと思って作る人の大半は、子供の頃は純粋に幸せで楽しかったし小中高では友達と部活や勉強に勤しんで青春を過ごして最高だったしその後も仲間と河原でBBQしたり旅行したり盆や正月は親戚一同で集まってワイワイやって新しく生まれた甥っ子姪っ子がいて可愛くて最高だし仕事は大変なこともあるけどそれなりに楽しくやっててトータルで見て人生って最高だな!って思ってるんだよなあ。
ワイもお前もお局やったんか
きょんくんでんわー
初心者がみてもわかるような構成になってると思ったのに意味不明
総集編ってほどではないけど短時間に編集されたやつがNHKでやるっつったからみてみたけど全然意味不明でつまらんくてみるのすぐやめった
増田で博之の話するやつめったと見かけんやで
舌を持ってかれる
事故ったときに同乗してたペットどうするかみたいなツイがバズってたけど、
犬のこして人間がみんな搬送されたくないって駄々こねたってところでドン引きしたわ
じゃあどうしろっていうんだよっていう
って考えてふと思ったけど、
純と愛みたいな感じなんか
・7年付き合い式場予約して新居も準備していた婚約者を、他の女に惚れたからという理由で「全部無かった事にしてくれ」の一言で切り捨てようとして
それを聞いた婚約者が自分から身を引く手紙を残して去って行ったその日に(婚約者に対する謝罪や自分の行為に対する良心の呵責等一切なく)他の女に告白
・沖縄戦における重苦しくて悲惨な体験談を老人から聞いた直後にその体験談を女への口説き文句として流用
・新婦がかつて振った男を騙し討ちで結婚式に無理やり参列させて「お似合いの二人です」とスピーチさせる←new!
・↑これら全てを「酷い奴が酷い事をしている」のではなく「良い話」「感動話」として扱っている
これを考えた人(脚本家だかプロデューサーだかディレクターだか知らないが)が人の心がなさ過ぎて怖すぎるんだが
どこまで酷くなっていくんだろうかこのドラマ
・母親を亡くした子供と一緒に母親との思い出の店で思い出の料理を食べながら
「新しい女と再婚するわ、因みにその女はお前の母親が闘病している頃から目をつけてた女な」と言い放って子供に再婚を認めさせる父親
もあったわ
これも中々の胸糞&考えた人が怖い話だった