[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 06:01 / Filesize : 179 KB / Number-of Response : 640
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

73 名前:nobodyさん mailto:sage [2007/04/15(日) 03:03:32 ID:???]
>>71
jp.php.net/manual/ja/function.dirname.php
及び関連項目を参照。

74 名前:73 mailto:sage [2007/04/15(日) 03:04:35 ID:???]
あ、ごめん。正規表現スレだったね。無視して。

75 名前:73 mailto:sage [2007/04/15(日) 03:10:35 ID:???]
で、考えてみたんだけど、

$path = '/abc/def.g/eee.txt';
preg_match('/(.*?)¥/([^¥/]*)¥.([^¥/.]*$)/', $path, $match);
print_r($match);

こんな感じでどう?


76 名前:73 mailto:sage [2007/04/15(日) 03:17:28 ID:???]
これじゃ拡張子のない場合に対応できないか。
/(.*?)¥/([^¥/]*?)(¥.[^¥/.]*)?$/
でどうかな。スレを汚してしまってすまん。

77 名前:nobodyさん mailto:sage [2007/04/15(日) 09:05:07 ID:???]
PHPなら、dirnameとbasenameつかえば正規表現なんか使う必要一切ないだろ

78 名前:nobodyさん mailto:sage [2007/04/15(日) 11:13:03 ID:???]
>>77
>>73-74

79 名前:71 mailto:sage [2007/04/15(日) 11:28:41 ID:???]
正規表現無しだとこんな感じでした

$p = pathinfo($fullpath);
$temp = explode('.',$p['basename'],2);
$p['name'] = $temp[0];
if(isset($temp[1])){
 $p['ext'] = $temp[1];
}

>>76を参考にして正規表現で書けました

$pattern = '`^(.*)[/\\\]([^.]*?)(?:\.(.*))?$`';
preg_match($pattern, $fullpath, $match);

ありがとうございました

80 名前:nobodyさん [2007/05/03(木) 19:11:49 ID:meD6A7ah]
phpで携帯電話の絵文字を取り除くようpreg_replaceを使っているのですが、
絵文字が複数含まれた文字列?などでうまく取り除けません。
こんな感じにしているのですが原因やおかしな点などご教示ください。お願いします。

$str = '絵文字が含まれる文字列';
$emojiSjisChars = '(?:[\x00-\x7F\xA1-\xDF]|(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]))';

#DoCoMoの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])|(?:\xF9[\xB1-\xFC])/', '$1', $str);

#AUの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:[\xf3\xf6\xf7][\x40-\xfc]|\xf4[\x40-\x8d])/', '$1', $str);

#Softbankの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)\x1B\x24[E-G].*?\x0F/', '$1', $str);

81 名前:80 [2007/05/03(木) 19:17:55 ID:meD6A7ah]
すいません。↑の$emojiSjisCharsは$sjisCharsの命名間違えです。



82 名前:nobodyさん mailto:sage [2007/05/03(木) 19:26:15 ID:???]
ちゃんと読んでないけど
(?:絵文字のコード) な部分を (?:絵文字のコード)+ にするだけではないの?

83 名前:80 [2007/05/03(木) 20:24:41 ID:meD6A7ah]
>>82
レスありがとうございます。
下のように+を入れましたがダメでした。
色々考えているとどんどん分からなくなってきました...
おかしな点があれば引き続きご教示お願いします。

#DoCoMoの場合 ※見にくいので表示上改行します。
$str = preg_replace(
  '/\G(' .$emojiSjisChars.'*?)
    (?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])+|
    (?:\xF9[\xB1-\xFC])+/', '$1', $str);

84 名前:nobodyさん mailto:sage [2007/05/04(金) 00:29:52 ID:???]
オライリーの詳細正規表現の本って
通常のと第2版ってのがあるけどどっちがいいのよ?

85 名前:nobodyさん mailto:sage [2007/05/04(金) 03:16:56 ID:???]
>>84
通常のって初版のことかい?
そりゃあ新しい方が。

具体的にどう変わったか覚えてないのでオライリーのサイトを見たけど、
Perlの対象が5.8にあがっているのと、.JAVAとNETの説明が増えたとからしい。


86 名前:nobodyさん mailto:sage [2007/05/10(木) 19:57:43 ID:???]
php4.3.11です
---------------------------------
$str = <<< DOC_END
あああああ
いいいいい
<html_start>
ううううう
えええええ
<html_end>
おおおおお
DOC_END;

$pattern = "/<html_start>(.*)<html_end>/";
$replacement = 'aaaabbbb';

$res = preg_replace($pattern, $replacement, $str);
print_r($res);
---------------------------------
と出力してみましたが何も表示されませんでした。
ホントは「あああああいいいいいaaaabbbbおおおおお」と出て欲しかったのですが…。
最終的には<html_start><html_end>で囲まれた範囲に
PHPのhtmlspecialchars()やnl2br()関数を適用して出力したいです。

87 名前:nobodyさん mailto:sage [2007/05/10(木) 20:35:51 ID:???]
>>86
> $pattern = "/<html_start>(.*)<html_end>/";

「 ^ や $ があるってことは正規表現って行単位?複数行の場合は?」とか思いながら

$pattern = "/<html_start>(.*)<html_end>/s";

にして試す。で、「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。

うちのPHP5さんでは元のコードでも「何も表示されない」にはならなかったな。
 
ブラウザ出力: あああああいいいいい うううううえええええ おおおおお
ソース: print_r($str) な感じ

88 名前:nobodyさん mailto:sage [2007/05/10(木) 20:51:04 ID:???]
>>87
s修飾子で動作しました!ありがとうございます。

>「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
関数のページばかりみて
jp.php.net/manual/ja/ref.pcre.php
jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php
のページの存在に気がつきませんでした…。

あとは関数を適用する方法を探してみますっ!

89 名前:nobodyさん mailto:sage [2007/05/10(木) 21:18:19 ID:???]
案外この手の質問したい人もいるんだね

90 名前:86 mailto:sage [2007/05/14(月) 15:45:03 ID:???]
後方置換する時に関数かましたくマニュアル眺めてたら「e修飾子」をみつけたのですが
>>87の「S修飾子」と同時に使おうと
$pattern = "/(.*?)<html_start>(.*)<html_end>(.*?)/se";
$replacement = "'\\2''\\1''\\3'";

こんなコードを書いてみた所
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Failed evaluating code:
といった感じで怒られます
修飾子2個は同時に使えないのでしょうか…?

91 名前:86 mailto:sage [2007/05/14(月) 17:55:10 ID:???]
>>86ですが
自分で見返してたらこれは既に正規表現でなくPHPの質問な気がしてきましたので該当スレに
移動しますです。
スレ違、申し訳ありませんでした。



92 名前:nobodyさん mailto:age [2007/05/17(木) 13:08:20 ID:???]
IPを正規表現でチェックしたいのですが
210.000.111.1〜210.000.111.255
215.100.000.1〜215.100.000.255
の2つに当てはまる場合、TRUE(int1)をかえすにはどうすればいいでしょうか?
以下のようにやってみたのですが他のIPでもint(1)がかえってきます。

preg_match('/^210\.000\.111\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ || ^215\.100\.000\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $_SERVER['REMOTE_ADDR'])


93 名前:nobodyさん mailto:sage [2007/05/17(木) 13:53:20 ID:???]
>>92
正規表現で foo || bar みたいなのはないっしょ。
/^(210...(中略)...|215...(中略)...)$/ みたいな。

アドレスの範囲のチェックをするなら正規表現使わない方が良いと思うけどね。

94 名前:おながいします [2007/06/06(水) 13:28:10 ID:iKhV2zih]
すみませんが、価格にマッチする正規表現を教えていただけないでしょうか。


\1,000,000,000
\12,345
\1,230
\200
\10


数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。

判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。

95 名前:おながいします [2007/06/06(水) 13:29:35 ID:iKhV2zih]
上の>>94ですが、使用言語はPHPです。

96 名前:nobodyさん mailto:sage [2007/06/06(水) 13:41:59 ID:???]
それは、「\12,1232,32」みたいなのははじきたいの?

97 名前:nobodyさん mailto:sage [2007/06/06(水) 13:49:54 ID:???]
「正規表現 カンマ」とかでぐぐってみると・・・

98 名前:nobodyさん mailto:sage [2007/06/06(水) 14:54:17 ID:???]
>>98
穴だらけだけどこんなんのこと?
$hoge = "\1,000";
if(ereg(".*[0-9,\\]",$hoge)):
echo "ok";
else:
echo "ng";
endif;

99 名前:nobodyさん mailto:sage [2007/06/06(水) 15:08:26 ID:???]
>>98
つ[ www.google.co.jp/search?hl=ja&q=%E9%87%91%E9%A1%8D%E3%80%80%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&lr= ]

100 名前:94 mailto:sage [2007/06/06(水) 17:22:28 ID:???]
>>96 >>97 >>98 >>99
皆様、ありがとう御座いました。
「価格 正規表現」、「値段 正規表現」でググってました(汗)

101 名前:nobodyさん mailto:sage [2007/06/30(土) 13:42:20 ID:???]
(?:pattern),および(?>=pattern)が認識されないエディタにおいて、
$obj->method();の「method」のみにマッチさせるにはどうすればいいでしょうか。
ちなみに(?=pattern)は使えます。




102 名前:nobodyさん [2007/07/09(月) 23:51:58 ID:jN4+J6ks]
VB.NETで正規表現を書いています。
条件としては、「A0123」のように、先頭がアルファベットのAでその他が数字4桁という正規表現と、
「01234」のような数字5桁という二種類のどちらかにマッチする正規表現を作っています。
正規表現は苦手で困っています。
どなたかご教授下さい。
よろしくお願いします。

103 名前:nobodyさん mailto:sage [2007/07/10(火) 01:52:51 ID:???]
>>012
[A\d]\d{4}

とか。
あと「教示」な。


104 名前:nobodyさん [2007/07/13(金) 17:31:53 ID:lsKPRG81]
phpで文中の郵便番号の部分を置き換える正規表現を書いているのですが
電話番号(携帯など)も引っかかってしまいます
どのように直せばいいのでしょうか?

mb_ereg_replace('([0-90-9]{3}[\-−ー‐]+[0-90-9]{4}|[0-90-9]{7})',"郵便番号",$data)

105 名前:nobodyさん mailto:sage [2007/07/14(土) 04:11:15 ID:???]
mb_ereg って戻り読み使えなかったんだっけ?

(\D)\d{3}-\d{4}(\d{3})?(?!\D) を \1郵便番号 で置換。でどう?
面倒くさいので全角数字とかハイフンの類は自分で調整して。


106 名前:nobodyさん [2007/07/20(金) 05:15:36 ID:wp5plGkY]
$textにHTMLタグを含んだ文字列が入っていて、
<>外部の< > " をそれぞれ < > " に置換したい(<>内部はそのまま)
のです。以下のように、まず全ての<>"を置換し、HTMLタグの<>だけを
元に戻してみましたが、うまくいきません。どなたかご教授願います。
言語はあとでPHPでも同様のものを作成する予定ですが、今はPerlです。

$text = "tt\"tt<3bbb\nst<a gg&tg;gg href=\"aaa\">bbb<\n";

print "before=\n";
print $text."\n\n";

$text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/\"/"/g;

$text =~ s/<([^(>)]*)>/<$1>/g;

while ($text =~ /<([^>]*)\"\;([^>]*)>/) {
$text =~ s/<([^>]*)\"\;([^>]*)>/<$1\"$2>/g;
}

print "after=\n";
print $text."\n";

↓このように置換されることを想定しています。
tt"tt<3bbb
st<a gg&tg;gg href="aaa">bbb<


107 名前:nobodyさん mailto:sage [2007/07/20(金) 05:26:31 ID:???]
久しぶりに実体参照の地雷を踏みまくってる投稿を見た。

108 名前:106 [2007/07/20(金) 05:38:28 ID:wp5plGkY]
「このように置換されることを想定しています。 」の部分で
実体参照の部分がそのまま表示されてしまったので全角で修正します。
よろしくお願いします。

tt&quot;tt&lt;3bbb
st<a gg&tg;gg href="aaa">bbb&lt;


109 名前:nobodyさん mailto:sage [2007/07/20(金) 08:47:21 ID:???]
何がやりたいのかさっぱりだ。
どこまでがタグか解析してタグ以外のタグ文字を実体参照化したいということ?
それ元のテキストを生成してる時点で何か間違ってるだろ

110 名前:nobodyさん mailto:sage [2007/07/20(金) 12:57:58 ID:???]
何かの内側と外側を判定するのは結構面倒だよなぁ。こないだ<a 〜>から</a>までの
間だけを操作しようと3分考えて、ネストがありえることに気付いて挫折した。

111 名前:nobodyさん mailto:sage [2007/07/20(金) 13:08:08 ID:???]
って>>106読んでなかった。>>109に同感。
それじゃあどこからどこまで切れば良いのかわからない。

xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz

の時、何が保証されていて、どこからどこまでをタグと見なせばいいの。



112 名前:106 [2007/07/21(土) 01:21:27 ID:VYWED9XA]
ごめんなさい。説明が足りませんでした。
掲示板で投稿された書き込みに対して、上記のような処理をしたいと考えています。
>>106のスクリプトは処理を掲示板に組み込む前に処理の部分だけテストするために作成したものです。
$textは書き込み内容と想定しています。

一番内側の<>をタグと見なしたいです。
xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz
この場合ですと、<fhg>と<qq>をタグとみなし、他は実体参照化したいと考えています。


113 名前:nobodyさん mailto:sage [2007/07/21(土) 02:45:37 ID:???]
つまりタグの定義は
<[^>]*>
ということですね。

114 名前:106 [2007/07/21(土) 08:55:35 ID:VYWED9XA]
>>113
左様です。


115 名前:nobodyさん mailto:sage [2007/07/21(土) 09:30:47 ID:???]
違うだろ、<[^<]*?>だろ、112の定義なら。
それ以前に106はエスケープ、エンコード、サニタイズ処理で何か間違ってる
use HTML::Entities;
$tag_re = qr/<[^<]*?>/;
$text =~ s/($tag_re)|(.)/$1||encode_entities($2)/eg;
print $text;

116 名前:nobodyさん [2007/07/21(土) 13:10:23 ID:7GHIEbSO]
PHPで
localhost/index.htm
https://localhost/index.htm
test.com/index.htm
から
/index.htm
/index.htm
/index.htm
これを出力したい場合

ereg_replace('^https?://(localhost|test.com)' ,'' ,$line);
これでは間違ってるでしょうか?
どなたか教えて下さい。お願いします




117 名前:たけもー [2007/07/27(金) 23:18:07 ID:boPeFaxI]
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = ereg_replace("[−]", "-", $a);

どうしたらいいでしょうか?

118 名前:nobodyさん [2007/07/28(土) 02:31:21 ID:k6nESKD8]
ereg_* はマルチバイト文字(全角文字)に対応していない。
mb_ereg_* か preg_* を使うといい。
ただしpreg_*のほうはUTF-8でないとダメだったと思う。


119 名前:たけもー [2007/07/28(土) 15:25:04 ID:9w1k0jgB]
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = mb_ereg_replace("[−]", "-", $a);

mb_でもだめでした。
どうしたらいいでしょうか?


120 名前:nobodyさん mailto:sage [2007/07/28(土) 15:37:30 ID:???]
文字コードとかどうなっとるん?

121 名前:たけもー [2007/07/28(土) 16:32:13 ID:9w1k0jgB]
文字コードの意味がいまいちわからないんです、テキストディタは
Shift-JISです、



122 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:50:43 ID:???]
PHPは本職じゃないんで良く知らんのだが、PHP自体がデフォルトの
エンコーディングを持っていて、何も指定しないとそれ使うはずだから、
自分がSJIS指定しているつもりでも、そうでない可能性があるってこと。

<?php

echo mb_internal_encoding() . "\n";
echo mb_regex_encoding() . "\n";

$v = "就職率−6月";

mb_regex_encoding("sjis");
echo mb_regex_encoding() . "\n";

$v = mb_ereg_replace("[−]", "-", $v);

echo $v;

こんなんで置換はできたっぽい。
echo しているのは確認のためなんで気にしないでいい。
いずれにしろ mb_regex_encodingで設定しないとダメだった。



123 名前:たけもー [2007/07/30(月) 07:40:51 ID:DqqhKvmn]
解決いたしましたw
ありがとうございますw

124 名前:たけもー [2007/07/30(月) 21:23:25 ID:TD8Lc2Id]
解決したはずが・・・

file(http://)で取得した文字列がUTF-8で
UTF-8からsjisにしたら全角マイナスが消えてしまいます。
消えて、改行されています・・・
テストソースですので
mb_ereg_replace
などで置き換えなどは一切してません。

どうしてでしょうか?

125 名前:nobodyさん mailto:sage [2007/07/30(月) 23:11:52 ID:???]
原因知ってるけど正規表現に何の関係が

126 名前:nobodyさん mailto:sage [2007/07/30(月) 23:54:01 ID:???]
>>125
誘導してやってくれ。(PHPわからん)

127 名前:nobodyさん mailto:sage [2007/07/31(火) 01:38:26 ID:???]
ちなみにPerlも同じだから。正規表現は関係ないけどね。

128 名前:nobodyさん mailto:sage [2007/07/31(火) 02:17:21 ID:???]
>>126
変換に使っている変換表の問題(なので正規表現の問題じゃない)。
PHPで使っている変換表の素性はわからん。

ぐぐれば「波ダッシュ問題」あたりとならんで見つかると思うけど
どっかのスレで話題になったか、これ?

www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=utf8+%E5%A4%89%E6%8F%9B+%E5%85%A8%E8%A7%92%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9+%E5%8C%96%E3%81%91%E3%82%8B

ま、がんがって調べてくれ >たけもー


129 名前:nobodyさん mailto:sage [2007/07/31(火) 02:24:36 ID:???]
△▲ WebProg 初心者の質問 Part15 ▼▽
pc11.2ch.net/test/read.cgi/php/1169725490/

ここ、かなあ。
つーか、元の要件でもこのスレと無関係な str_replace で済むじゃん。

130 名前:nobodyさん [2007/08/10(金) 10:21:28 ID:dRcI3VfS]
PHPとか全く知らない者なのですが、利用しているBBSのアクセス禁止設定が
正規表現で指定しろと言うんです。勿論正規表現は知らないどころか初めて耳にしました。

a00abcd1.kngwnt01.ap.so-net.ne.jp
123.123.123.123.ap.yournet.ne.jp

前者のIPが何らかのコード1つに変換されるタイプと後者のIPがそのまま出るタイプの
リモホをそれぞれホスト単位で全て「正規表現で指定」するとずばりどういう表記になるのでしょう?

131 名前:nobodyさん mailto:sage [2007/08/10(金) 10:29:11 ID:???]
ホスト数が少ないなら列挙すりゃいいんじゃね。
(xxx.example1.jp|xxx.example2.jp|xxx.example3.jp)



132 名前:nobodyさん mailto:sage [2007/08/10(金) 13:25:55 ID:???]
ありがとうございます
なるほど…ひとつをピンポイントで指定する場合は
正規表現というのを使わなくても良いという事なのでしょうか…
130の前者だけなら
a00abcd1.kngwnt01.ap.so-net.ne.jp
と、そのまま指定、両方の二つなら
(a00abcd1.kngwnt01.ap.so-net.ne.jp|123.123.123.123.ap.yournet.ne.jp)
となるんでしょうか?

133 名前:nobodyさん mailto:sage [2007/08/10(金) 18:16:54 ID:???]
>>132
そのものずばりというのも正規表現の一種だよ。
 a00abcd1.kngwnt01.ap.so-net.ne.jp
というのも正規表現だよ。

あと細かい話を言うと、ピリオド「.」は正規表現において任意の1文字にマッチするメタ文字なので、
ピリオドそのものにマッチさせたい(他の文字にはマッチさせたくない)ときには「.」の代わりに「¥.」を使う。

 a00abcd1¥.kngwnt01¥.ap.so-net¥.ne¥.jp

んでも、この場合はそこまでしなくても問題はなさそうだけどね。

134 名前:nobodyさん mailto:sage [2007/08/10(金) 22:15:38 ID:???]
>>133
どうもありがとうございました!大変参考になりました
というかこれを機会にちょっと勉強してみます…
ありがとうございました

135 名前:nobodyさん [2007/08/11(土) 01:30:22 ID:2Sf3pkhN]
.*

.+
は、完全に同じ意味と考えてもOKですか?
それとも、何か挙動が変わってくることはありえますか?

136 名前:nobodyさん mailto:sage [2007/08/11(土) 02:02:02 ID:???]
.+ 1文字以上の任意の文字列
.* 0文字以上の任意の文字列
で最初から違ってましたね
ナハハ…

137 名前: ◆xIL6SyuS5U mailto:sage [2007/08/11(土) 02:39:04 ID:???]
a

138 名前:nobodyさん mailto:sage [2007/08/14(火) 22:01:22 ID:???]
perl互換のPHP正規表現を勉強し始めたのですが、
3.3以上に該当するの文字列っていうのは、できますでしょうか?
たとえば3.3.4や3.5、9.0などです。
バージョンのようなものです。
やはり数値型でないと難しいのでしょうか。

139 名前:nobodyさん mailto:sage [2007/08/14(火) 22:20:59 ID:???]
バージョン番号文字列って数値型にしてもめんどくさいんだよね。
3.10.0 とかね、真面目にやろうとすると、
'.' で split して、上の桁から順に整数値として比較していく、
みたいにやらないといけなかったりして。

140 名前:nobodyさん mailto:sage [2007/08/14(火) 23:03:21 ID:???]
>>139
3.3以上っていう決まりだけならどうかけますかね?
3.2があてはまらなければ大丈夫なんですが。

141 名前:nobodyさん mailto:sage [2007/08/15(水) 00:01:44 ID:???]
/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:[3-9](?:\.(?:[1-9]\d*|0))*))\z/



142 名前:nobodyさん mailto:sage [2007/08/15(水) 00:28:29 ID:???]
3.10 も 3.20 も蹴っていいの?

143 名前:141 mailto:sage [2007/08/15(水) 01:17:11 ID:???]
うわボケてたアルよ。

/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:(?:[1-9]\d+|[3-9])(?:\.(?:[1-9]\d*|0))*))\z/

144 名前:nobodyさん mailto:sage [2007/08/15(水) 22:05:09 ID:???]
>>141
ありがとー!ちょっと見てみます!

>>142
厳密にどういった値があり得るのかも分からないのでそこまで細かくしなくてもいいかなという感じです。
バージョンというか、ユーザーエージェントの後によくついている数値なんですが。


145 名前:nobodyさん [2007/09/01(土) 14:16:44 ID:tMwZKBAJ]
"*"をWebで調べると「直前の文字0回以上の繰り返しにマッチ」とでてくる。
UNIXで
% ls
a0/ a1/ a2/
のとき
% cd *1
ができるけど*は何の繰り返し???

*は何でもマッチと思っていたのは間違いですか???




146 名前:nobodyさん [2007/09/01(土) 15:26:18 ID:epTGamb+]
>>145
Perl互換の正規表現では 「*」 は量指定子というものの一種でありまして、 文字、 文字クラス、 グループの直後に付き、
それらに0回以上の繰り返しという意味を持たせるのですが、 正規表現体系が違えば 「*」 が違うことを意味することもありましょう。

147 名前:nobodyさん [2007/09/01(土) 15:34:18 ID:epTGamb+]
要するに、 正規表現体系が違えば記号の意味も異なるということです。

148 名前:nobodyさん [2007/09/01(土) 15:58:40 ID:tMwZKBAJ]
>>146
>>147
理解しました。ありがとうございました。

149 名前:nobodyさん [2007/09/01(土) 16:54:59 ID:fGUplrri]
[2ch公式広告]

一瞬、ハーバーライフと間違えるところだった。。
違うよ、コレは。

ヤフオク関連の最強情報
これを知らずして、ヤフオクで稼ぐことは出来ない。(キッパリ)

2ch2.net/.l?=jd2e

150 名前:nobodyさん mailto:sage [2007/09/02(日) 03:27:50 ID:???]
>>145-148

待てw


151 名前:nobodyさん mailto:sage [2007/09/02(日) 03:54:38 ID:???]
>>150
どっちも「それは正規表現じゃねえよ」からグダグダと書いても仕方ないから
待たせなくてよい。



152 名前:nobodyさん [2007/09/02(日) 09:50:38 ID:RtluGpKC]
192.168.50.5 //OK
192.168.*.* //OK
1000.1000.1000.1000/OK
*.168.50.5 //NG

(\d+)(\.([*(\d+)])){3}
なぜこれでダメ?


153 名前:nobodyさん [2007/09/02(日) 11:04:51 ID:tGLa/mAn]
>>150-151
正規表現とは文字列の集合を表現する手段でありますから、
ワイルドカードを用いた表現も正規表現の一種であります。

154 名前:nobodyさん [2007/09/02(日) 11:20:25 ID:tGLa/mAn]
>>152
> (\d+)(\.([*(\d+)])){3}

これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

> *.168.50.5

これは数字の後、 ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が2回しか繰り返していないので、
先ほどの正規表現にマッチしません。

155 名前:nobodyさん [2007/09/02(日) 11:40:01 ID:tGLa/mAn]
いや、 待ってください。

> (\d+)(\.([*(\d+)])){3}

だと、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のすべてにマッチしないはずです。 先ほど

> これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

と申しましたが、 より正確には、

・ 数字が1つ以上あり、 その後ピリオドと 「*」、 「(」、 数字1つ、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現

でありまして、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のどれもそのような文字列ではないからです。

156 名前:nobodyさん mailto:sage [2007/09/02(日) 12:28:15 ID:???]
\.

157 名前:nobodyさん mailto:sage [2007/09/02(日) 13:10:37 ID:???]
どうせ1000がいやんって話なんだろうけど、0から255までの
数字だけがマッチする正規表現ってむずくね?
[0-9]|[12][0-2]?[0-9]|[12]?[34][0-9]|1?[5-9][0-9]|25[0-5]
とか
[0-9]|1[0-9][0-9]?|2[0-4]?[0-9]|[3-9][0-9]|25[0-5]
とか

158 名前:nobodyさん mailto:sage [2007/09/02(日) 19:09:05 ID:???]
PHPのPerl互換の正規表現のことで質問です。

次のような文章があったとします。
左のは行番号で、実際の文章中にはありません。

01.<div>
02.text
03.<img>
04.</div>
05.
06.<div>
07.text1
08.text2
09.</div>
10.
11.<div>
12.hoge
13.<img>
14.</div>

ちなみにドットは改行にもマッチするようにしておきます。
これに対してパターン「<div>\n(.+)\n</div>」を最小マッチさせると、
サブパターンで02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれるんですが、

今度は<img>を含むdivだけをマッチさせようとして、「<div>\n(.+\n<img>)\n<div>」で最小マッチをさせると、
02,03と07,08,09,10,11,12,13行目にマッチしてしまいます。
ここで02,03と12,13行目だけにマッチさせるにはどうすればいいのでしょうか?
いろいろ考えたのですがよくわかりません。
どなたかよろしくお願いします。

159 名前:nobodyさん [2007/09/02(日) 19:35:53 ID:/HflMMhV]

すいません
「02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれる」は
02,03と07,08と12,13の間違いですね

160 名前:nobodyさん mailto:sage [2007/09/02(日) 20:08:53 ID:???]
すいません自己解決しました
「<div>\n((?:[^<]|<(?!div))+\n<img>)\n<div>」
これでいけるんですね

161 名前:nobodyさん [2007/09/04(火) 05:14:07 ID:p30GnV0e]
IPアドレスの正規表現についてやっぱりわからなかったです。
2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
192.168.50.*
192.168.*.*
192.*.*.*
192.168.50.5
1000.1000.1000.1000
これらはすべてOKとします。




162 名前:nobodyさん mailto:sage [2007/09/04(火) 09:42:52 ID:???]
>>161
> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?

それ先に言えよ!
どういう結果が欲しくて、どう書いたら、どうダメだったか、を具体的に書かんと。
あと、使用してる処理系 (言語やソフトウェア) も。

で、ダメだった正規表現中の [*(\d+)] だけど、
[] は「文字クラス」の正規表現なので、
>>154 の言っているように * ( 数字 + ) のいずれかの「文字」を表す。
「* または数字」を表現したいのであれば、 (\*|\d+) みたいにする。

ので、こうかな。
(\d+)(\.(\*|\d+)){3}

163 名前:nobodyさん [2007/09/04(火) 11:21:03 ID:/G1gxUUQ]
$` (マッチした文字列の前にあるすべての文字列 )
↑これの使い方を教えてください。言語はPerlです。

164 名前:nobodyさん mailto:sage [2007/09/04(火) 11:29:12 ID:???]
>>163

"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";

↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。

165 名前:nobodyさん [2007/09/04(火) 11:54:02 ID:/G1gxUUQ]
>>164
できました。ありがとうございます。

166 名前:nobodyさん mailto:sage [2007/09/09(日) 01:04:12 ID:???]
***.com([0-9]もしくは[a-z]の文字が3つ並び、その後に.com)の表記方法を教えてください

167 名前:nobodyさん [2007/09/10(月) 21:26:12 ID:lrmAiBXN]
>>166
Perl互換の正規表現だと

[0-9a-z]{3}\.com

168 名前:nobodyさん mailto:sage [2007/09/12(水) 05:01:53 ID:???]
>>166
\w{3}\.com

169 名前:nobodyさん [2007/09/12(水) 11:22:48 ID:DkIOyoGe]
>>168
それだと大文字とアンダースコアにもマッチしてしまいます。

170 名前:nobodyさん mailto:sage [2007/09/15(土) 15:32:58 ID:???]
<title>ほげほげ</title>
の「ほげほげ」だけを抜き出すのにはどう表記すればいいのでしょうか?

171 名前:nobodyさん mailto:sage [2007/09/15(土) 16:48:18 ID:???]
/<title>([^<]+)<\/title>/



172 名前:nobodyさん mailto:sage [2007/09/15(土) 17:17:54 ID:???]
>>171
ありがとうございます。

173 名前:nobodyさん [2007/09/16(日) 01:35:56 ID:6P4HpCmY]
PHP 4.4.7で

hoge
hage
123.txt

の中から 123 を抜き出したいんだけど
"/^(.+?).txt/"
だと当然

hoge
hage
123

がマッチしてしまう。
hoge や hage は任意の文字列で数字が入る可能性もあるのだけど、どうやって抽出したらいいんでしょう。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<179KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef