[過去ログ] 正規表現道場@2ch Part2 (981レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(6): 02/11/24 22:57 ID:LrbVcl3Y(1) AAS
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

リンクなどは>>2-5のあたりに。
962: 03/11/15 12:34 ID:??? AAS
>>961
[^>]+なら最短マッチにしなくても最初の>で止まるし。
つかRFC2822的には@の前に>来てもOKだし。
0文字のユーザ名を許可しないなら.+?でいいのでは。

>>960
私もPHP知らんけどeregでは最短マッチ使えなくて
preg_matchを使えって事らしい。ググって。
963
(2): 03/11/15 14:09 ID:??? AAS
RFC的な話は別にして、メールアカウントとして普通に認められる文字って
英数と - _ ぐらいだと思う(Yahoo mailでは - も使えなかった)ので
[-\w]+?@docomo\.ne\.jp で充分なんじゃない?
後ろに @ があるので最短マッチにせず
[-\w]+@docomo\.ne\.jp でも同じだと思うけど。
余計なものはなるべく認めないという方向で。
964: 03/11/15 15:16 ID:??? AAS
>>963
せめて先頭はアルファベットくらいは判別した方が。
965: 03/11/15 15:33 ID:??? AAS
docomoのメルアドって今でも電番だけのやつって通用するのかな?
だとすると先頭をアルファベットに限定するのはマズイかも
0で始まるのだけ含むってのはアリかもしれないけど
966: 03/11/15 17:19 ID:??? AAS
(´-`).。oO(なんで RFC を無視しちゃうんだろうねぇ。。。)
967: 03/11/15 17:23 ID:??? AAS
>>963
スレ違いな話になるけど、DoCoMo は . も使える事が名言されている。
外部リンク[html]:www.docomo-kansai.co.jp
そして RFC 的には不正な、@ 直前に . が来るメールアドレスも実際に
使われている。旧 J-Phone は更に / ? + が使えるらしい。

こういったケースにぶつかる度に変更を加えていくのは泥沼なので、
最初から「\w と - のみ」のようにキツめのハウスルールを課すよりは
寛容なルールを採った方が、運用時に問題が出にくい。
968
(1): 03/11/15 17:26 ID:??? AAS
>RFC 的には不正な、@ 直前に . が来るメールアドレス
いったいどのRFCに使えないなんていう記述が?
969
(2): 03/11/15 17:36 ID:??? AAS
PerlメモのURL文字列を判別するやつのように
RFC完全準拠となると実用に耐えない正規表現になることもあるので
ほどほどにってことで。特にRFC崇拝者は。
970: 03/11/15 18:05 ID:??? AAS
AA省
971: 03/11/15 22:08 ID:??? AAS
>>969
お前が RFC を読めないからって滅茶苦茶言うなよ。
972
(1): 03/11/16 11:50 ID:??? AAS
>>969は、保守性と処理速度を鑑みて「実用に耐えない」だと思う。
973
(1): 03/11/16 12:34 ID:??? AAS
>>972
ということにしたいのですね? :-)
974
(1): 03/11/16 14:15 ID:??? AAS
速度も保守性もそれほど違わんと思うが...。
単に分かったとこだけで済ましとこうというのが
本音のような気もする。
975: これが保守性に富んだ正規表現か?(w 03/11/16 18:45 ID:??? AAS
(?:(?:[a-z]|[A-Z])(?:(?:[a-z]|[A-Z])|[0-9]|[-+.])*:(?:(?://(?:(?:(
?:(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[-_.!~*'()])|%(?:[0-9]|[A-Fa-f])
(?:[0-9]|[A-Fa-f])|[;:&=+$,])*@)?(?:(?:(?:(?:(?:[a-z]|[A-Z])|[0-9]
)|(?:(?:[a-z]|[A-Z])|[0-9])(?:(?:(?:[a-z]|[A-Z])|[0-9])|-)*(?:(?:[
a-z]|[A-Z])|[0-9]))\.)*(?:(?:[a-z]|[A-Z])|(?:[a-z]|[A-Z])(?:(?:(?:
[a-z]|[A-Z])|[0-9])|-)*(?:(?:[a-z]|[A-Z])|[0-9]))\.?|[0-9]+\.[0-9]
+\.[0-9]+\.[0-9]+)(?::[0-9]*)?)?|(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[
-_.!~*'()])|%(?:[0-9]|[A-Fa-f])(?:[0-9]|[A-Fa-f])|[$,;:@&=+])+)(?:
/(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[-_.!~*'()])|%(?:[0-9]|[A-Fa-f])(
?:[0-9]|[A-Fa-f])|[:@&=+$,])*(?:;(?:(?:(?:(?:[a-z]|[A-Z])|[0-9])|[
省19
976: 03/11/16 19:12 ID:??? AAS
おしい。
ちょい工夫するともっと分かりやすく正確な表現になる。

って大昔からくりかえし話題になるネタだけど。
実際上はそこまでしないで逃げる罠。
977: 03/11/16 21:24 ID:??? AAS
>>960 の目的はメールアドレスが RFC 的に valid かを調べる事じゃ
ないし、domain は固定なので、厳密に調べるにしても必要なのは
local-part の正規表現だけだ。

my $atext = qr"[!#\$%&'*+\-/0-9=?A-Z^_`a-z{|}~]";
my $qtext = qr/[^\x0A\x0D"\\\x80-\xFF]*/;
my $valid_local_part = qr/
  (?:$atext+(?!$atext)|"$qtext(?:\\[^\x80-\xFF]$qtext)*")
  (?:\.$atext+(?!$atext)|"$qtext(?:\\[^\x80-\xFF]$qtext)*")*
/x;

. の使い方に目くじらを立てなければこうできる。
省7
978
(1): 03/11/18 02:53 ID:??? AAS
クエリのチェックをしようとしているのですが、どうすれば良いのでしょうか。
形式は「一つの組は英数字=英数字、複数ある場合は&区切り」という一般的なもので、
ここでのチェックは単にその形式に沿っているかどうかを判断するだけとしたいと思い

m/^(((\w*?)?=?(\w*?)?)?(\&?))+$/

とやってみたのですが、「=」が二つ続いていたら通ってしまうなど駄目なようで、
この辺りで詰まって解らなくなり質問に来た次第です。
979: 03/11/18 04:02 ID:??? AAS
>>978
英数字は空文字を許さない、とかなら、こんなんでいいのでは?
「英数字=英数字」、複数ある場合はこの後にさらに「&英数字=英数字」を繰り返し。
m/^\w+\=\w+(?:\&\w+\=\w+)*$/
980: 03/11/18 04:14 ID:??? AAS
「英数字=なし」もあるよね
これでうまくできた気がするけど

\w+?=\w*?(&\w+?=\w*?)*
981: 03/11/18 13:23 ID:??? AAS
>>973-974
じっくり読んでみてやっと理解できました…どうもです。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.501s*