[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
73
(4): 2017/04/23(日)07:11 ID:2K1Rl01+(1) AAS
^[^+]*$|\+(|0*[0-9]|0*[1-9][0-9]|[1-9][0-9][0-9]|0([1-7][0-9][0-9]|8[0-9][0-9])|0(90[1-9]|9[1-9][0-9])|[1-9][0-9][0-9][0-9]|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)

●入力と結果(✓一致 ❌不一致)
✓ Sat May 24 08:05:44 2014
✓ Tue Mar 28 06:21:47 2017 +
✓ Tue, 26 Jul 2016 23:55:46 -0
✓ Wed, 05 Oct 2016 15:24:09 -0900
✓ Wed, 4 Mar 2015 08:39:08 +09000
✓ Fri, 30 Oct 2015 07:56:41 +00900
✓ Wed, 4 Mar 2015 08:39:08 0900
❌ Wed, 25 Mar 2009 14:18:41 +0900
❌ Tue, 8 Mar 2016 16:11:55 +0900 (JST)
❌ Sat, 24 Jul 2004 03:48:21 +0900<br>
75: 56 ◆mUjtBupG2M 2017/04/23(日)22:57 ID:/2AcrhSu(1) AAS
>>72
質問に忠実な正規表現ありがとうございました

>>73
きゃー素敵!と冗談はさておき
まさに望んでいたものでした、本当にどうもありがとうございました!
76
(2): 2017/04/28(金)19:19 ID:VBxbz7un(1/2) AAS
正規表現を勉強し始めた者です
>>73の正規表現について2つ質問させて下さい

展開すると以下のようになりますよね
^[^+]*$   「+」が無い行に一致。残りは「+」が在る行
(
「+」に数字が続く場合の0〜3桁とその先頭に0が続くパターン ※Q1
\+
\+0*[0-9]
\+0*[1-9][0-9]   [1-9]なのは0*0[0-9]は0*[0-9]に含まれているから
\+[1-9][0-9][0-9]  3桁目で0*とすると0900にマッチしてしまう

4桁で「0900以外」のパターン ※Q2
\+0[1-7][0-9][0-9]
\+08[0-9][0-9]
\+090[1-9]
\+09[1-9][0-9]
\+[1-9][0-9][0-9][0-9]

\+[0-9][0-9][0-9][0-9][0-9]+  5桁以上
)
([^0-9]|$)  続く文字が数字以外もしくは行末。これが無いと+0900に3桁以下の式でマッチしてしまう

Q1
3桁までの表現に0*としてるのはなぜなのでしょうか?
素人考えには
[0-9]?
[0-9][0-9]
[0-9][0-9][0-9]
で良いのでは?と思うのです。 [0-9]?|[0-9][0-9][0-9]? これでも0〜1桁と2〜3桁になりますよね?
「0*」という書き方の方が処理が速くなったりとか何か理由があるのでしょうか?
77
(1): 76 2017/04/28(金)19:24 ID:VBxbz7un(2/2) AAS
Q2
\+0[1-7][0-9][0-9]
\+08[0-9][0-9]
[1-7]なのは00の場合1〜3桁の式と被るから1からなのだと思うのですが
この2つは合わせて \+0[1-8][0-9][0-9] としてはダメなのでしょうか?

「0900以外」の4桁の数字のパターンは以下のようになるかと思います
[1-9][0-9][0-9][0-9]  0xxx
[0-9][0-8][0-9][0-9]  x9xx
[0-9][0-9][1-9][0-9]  xx0x
[0-9][0-9][0-9][1-9]  xxx0

被っているところを数値に置き換え
[1-9][0-9][0-9][0-9]
0  [0-8][0-9][0-9]
0  9  [1-9][0-9]
0  9  0  [1-9]

一応Q1と合わせ疑問に思ったところを書き換えて>>73さんのサンプルと+0〜+10000と+0000〜+9999をテキストに書き出して
テストしてみたところ問題無さそうなのを確認したのですがそれでも確信が持てず質問させて頂きました
試した式は以下になります
^[^+]*$|\+([0-9]?|[0-9][0-9]|[0-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|0[0-8][0-9][0-9]|09[1-9][0-9]|090[1-9]|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)
^[^+]*$|\+((|[0-9][0-9])[0-9]?|([1-9][0-9]|0[0-8])[0-9][0-9]|09([1-9][0-9]|0[1-9])|[0-9][0-9][0-9][0-9][0-9]+)([^0-9]|$)
^[^+]*$|\+(|090[1-9]|((([0-9][0-9]+|(|[1-9]))[0-9]|(|0[0-8]))[0-9]|(|09[1-9]))[0-9])([^0-9]|$)

身近に聞ける人が居ないので自分の解釈が間違っていたり何か見落としているのではないか?と悶々としております
どなたか分かる方が居られましたら2つの疑問点の回答をお願いしたいです
また解釈を間違えている箇所がありましたらそちらも指摘下さい。よろしくお願いします
79: 2017/04/30(日)00:11 ID:PxU3UZJt(1/3) AAS
>>78
回答ありがとうございます
つい先日覚え始めた身ながらも>>73さんの式に感銘を受け是非とも理解したく思い
分からない事だらけの中、自分であれこれ分解したり試したりしていたのですが
疑問に思った点を自力で晴らす事が出来ず質問させて頂きました
未熟故に不理解な部分があるのではないかと思っておりましたが
「どちらも深い意味はない」との事で少々肩透かしでしたが安心しました
無知故に身構え過ぎていたようです
作成の経緯や方法まで丁寧に説明して頂きありがとうございました
今後の参考にさせて頂きます。感謝!
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s