トップページ⇒php
986コメント301KB

正規表現道場@2ch

■ このスレッドは過去ログ倉庫に格納されています
0001ヽ(´▽`)ノ2001/07/26(木) 09:03ID:???
以外と毛嫌いして居る人も多そうな正規表現、
でもperlを使いのなす上で避けて通れない道だったりするかもです。
そこで、スクラップブック的に目に止まったカッコイイ正規表現を
書き留めておこうと言うスレッドです。
質問する時は言語と、得たい結果をなるべく詳しく書いてね。

取り合えず僕が知ってる有用なリンクです。
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・
01019001/10/10 01:04ID:???
mod_rewriteじゃなかった(恥
0102名無しさん@お腹いっぱい。01/10/10 01:54ID:???
良く調べた! SIFT_JIS決め撃ちの所で使えるね (・∀・)♪
01039701/10/10 21:41ID:???
>>97
RedirectMatch ^/([^\?]*)\\\(.*)$ /$1/$2
なんか知らぬが解決した。
0104 01/10/12 01:11ID:???
$http_URL_regex=「URLの正規表現」(長いので割愛)

として、掲示板スクリプトの書き込みの中にあるURLに
こうやって自動リンク貼ってる。↓

$data =~ s/($http_URL_regex)/<a href="$1">$1<\/a>/go;

現状だと
http://www.test.com/dir/index.html が
<a href="http://www.test.com/dir/index.html>;http://www.test.com/dir/index.html<;/a> に
置き換わるだけだけど、URL表示の/(スラッシュ)を「<wbr>/」に
置き換えるようにしたい。

具体的には、上の例でいうと
<a href="http://www.test.com/dir/index.html>;http://www.test.com<;wbr>/dir<wbr>/index.html</a>
って感じにしたい。

一行が長くてゴメソ。分かる人教えて。
0105名無しさん@お腹いっぱい。01/10/12 02:04ID:???
>>104
分かるもなにも、その$http_URL_regexってやつを
見せてもらわんと。そんなに長いんか?
も、もしかして、大崎氏の「Perlメモ」にある
ものすごい正規表現のことかな。。。
0106名無しさん@お腹いっぱい。01/10/12 02:04ID:???
>>104
$data =~ s/($http_URL_regex)/&convurl($1)/ge;
sub convurl {
my($url) = shift;
my($str) = qq{<a href="$url">};
$url =~ s|(?<!/)/(?!/)|<wbr>/|g;
$str .= qq{$url</a>};
}

こんなんしか思いつかんダサ
010710401/10/12 09:48ID:???
>>105
bingo...
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
にあるやつです。

>>106
うまくいった!ありがとう!
0108名無しさん@お腹いっぱい。01/10/12 12:46ID:???
<a href="http://www.test.com/dir/index.html>;http://www.test.com<;wbr>/dir<wbr>/index.html</a>
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
リンク張るならここまでだろ。2chださい。
0109名無しさん@お腹いっぱい。01/10/12 13:13ID:???
ちょいテスト

quoteなし
<a href=http://hoge.com/hoge.html>;http://hoge.com<;wbr>/hoge.html</a>

quoteあり
<a href="http://hoge.com/hoge.html">http://hoge.com<;wbr>/hoge.html</a>

quote閉じ忘れ
<a href="http://hoge.com/hoge.html>;http://hoge.com<;wbr>/hoge.html</a>
011010901/10/12 13:15ID:???
>>108 禿しく同意!
0111 01/10/15 01:18ID:???
0112名無しさん@お腹いっぱい。01/10/15 01:29ID:???
>>108,109=馬鹿
0113名無しさん@お腹いっぱい。01/10/15 06:28ID:???
>>112
その心は「クォート閉じ忘れやクォートなしは不正なのに、
それに対応していない2chを批判するのは馬鹿」という理解でよいですか。
0114名無しさん@お腹いっぱい。01/10/15 08:08ID:???
不正じゃなくても間違えますが何か?
<a href="http://example.com/">http://example.com/<;/a>
ということでお題。
&は含むけど&lt;や&gt;は含まないように
リンクを張る正規表現は?
0115名無しさん@お腹いっぱい。01/10/15 08:11ID:???
ちなみに現行はこう。
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig;
011611301/10/15 09:07ID:???
>>114
いや、そういう意味で言ってるんだとしたら間違ってるよ。
っていいたかったの。

> &は含むけど<や>は含まないように
> リンクを張る正規表現は?
URLという意味では<が含まれてても問題(よね?)と思うので、
&lt;や&gt;をはじく必要は無いと思うけど・・・
ちょっと考えるよ。
0117名無しさん@お腹いっぱい。01/10/15 09:12ID:???
すんません。
$116 =~ s/(問題)/$1無い/;
$116 =~ s/</&lt;/g;
$116 =~ s/>/&gt;/g;
0118名無しさん@お腹いっぱい。01/10/15 10:07ID:???
>>116-117
問題あるよ。
http://www.isi.edu/in-notes/rfc2396.txt
0119名無しさん@お腹いっぱい。01/10/15 10:08ID:???
つーか正しく伝わってないかも。
< や > が含まれてると問題あるけど、htmlソース上は
&lt; や &gt; だから含まれてしまうのを
修正したいってことなんだけど。
012011301/10/15 10:18ID:???
s/</&lt;/g; s/>/&gt;/g してから
リンク張ってるのがまずいんですね。
リンク張りつつ < > 除去すれば正確になるのかな。

s{
  ((?:https?|ftp|gopher|telnet|whois|news)://[-_.!~*'()a-zA-Z0-9;/?:\@&=+\$,%]+)
  | (<) | (>)
}{
  $1 ? "<a href=\"$1\">$1</a>" :
  $2 ? '&lt;' :
  $3 ? '&gt;' :
  ''
}xeg;
とかはどうですか?
012111301/10/15 10:37ID:???
単純に &lt;、&gt; を避けるならこんな感じっすかね?
s{(
    (?:https?|ftp|gopher|telnet|whois|news)://
    (?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;
0122名無しさん@お腹いっぱい。01/10/15 11:23ID:???
news: の場合も // で始まるんでしたっけ?
s{(
(?:(?:https?|ftp|gopher|telnet|whois)://|news:)
(?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;
0123名無しさん@お腹いっぱい。01/10/15 11:35ID:???
URI referenceの場合にもリンクを貼りたいから
s{(
(?:(?:https?|ftp|gopher|telnet|whois)://|news:)
(?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%#] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;
0124名無しさん@お腹いっぱい。01/10/15 11:51ID:???
一般的なCGIなら http と ftp 以外にリンク貼る必要も無いだろうから、
これで十分かな?
s{((?:https?|ftp)://(?:[-\w.!~*'();/?:\@=+\$,%#]|&(?![lg]t;))+)}{<a href="$1">$1</a>}g;
どっちにしても中途半端だけど。
0125名無しさん@お腹いっぱい。01/10/15 12:21ID:???
oとtarget=_blankを付けてみる。
s{((?:https?|ftp)://(?:[-\w.!~*'();/?:\@=+\$,%#]|&(?![lg]t;))+)}{<a href="$1" target=_blank>$1</a>}go;
0126名無しさん@お腹いっぱい。01/10/15 12:57ID:???
o修飾子はパターンに変数が入っていないときは影響なしとおもう。
ちがうの?
0127名無しさん@お腹いっぱい。01/10/15 13:01ID:???
そうかも。
0128名無しさん@お腹いっぱい。01/10/19 22:45ID:SauUPYVx
正規表現の火を消すな。
0129名無しさん@お腹いっぱい。01/10/20 00:13ID:???
意味ワカンネーよ  (藁
#詳説買って来たけどかなり本棚の肥やしになりそうな感じ・・・
0130名無しさん@お腹いっぱい。01/10/20 08:13ID:???
&&&
0131名無しさん@お腹いっぱい。01/10/20 16:58ID:rS0gfeFk
正規表現って、オミトロンで使ってるマッチングルールと同じ?
0132名無しさん@お腹いっぱい。01/10/20 22:31ID:???
それはちょっとおかしい。
良く突っ込まれる例:
あめぞうって、2chとかMAGABBSと同じタイプ?
0133名無しさん@お腹いっぱい。01/10/25 02:00ID:GZ9i4shV
テスト

http://www.2ch.
net/
<a href="http://www.2ch.net/">http://www.2ch.net/<;/a>
0134名無しさん@お腹いっぱい。 01/10/25 02:24ID:???
http://www.2ch.net/<;/a>
0135名無しさん@お腹いっぱい。01/10/25 17:47ID:???
>http://www.2ch.net/a<;/a>
0136名無しさん@お腹いっぱい。01/10/25 17:56ID:???
http://www.2ch.net/----This site is a Japanese famouse WEB site.
0137名無しさん@お腹いっぱい。01/10/26 09:05ID:+A/kF3WN
何をやりたいんだ
0138名無しさん@お腹いっぱい。01/10/26 11:48ID:???
</a>までリンクされる現象が直ってるかどうかのテスト、でしょ。
read.cgiでは直ってるみたいね。
0139名無しさん@お腹いっぱい。01/10/26 11:54ID:???
http://www.google.co.jp/search?q=%83S%83%8B%83A&hl=ja&lr=
0140名無しさん@お腹いっぱい。01/10/27 00:02ID:7lO0RLH0
道場は閉鎖されたようです。
0141名無しさん@お腹いっぱい。01/10/28 01:33ID:???
移転あげ
0142名無しさん@お腹いっぱい。 01/11/08 04:45ID:???
あげっ!!
詳説難しいって言う意見が有るけど(確かに ^-^; )
俺は最初詳説買ってチンプンカンプンだったんで、ゆたか氏の正規表現入門を
買ったよ、それから詳説読んだら理解がすすみやすかった
0143名無しさん@お腹いっぱい。01/11/17 19:17ID:BIcYTt7w
[0-9a-z]++で、8文字までっていうのはどうやるんでしょう?
0144吉野家シリーズでいってみよう!01/11/17 22:44ID:Sr4+rAbn
そんな事よりちょいと聞いてくれよ。
先日、正規表現のエンジン書いたんです。NFA.
そしたら単語境界の処理とかどうとか聞いてくるんです。
もうね、アホかと。馬鹿かと。
お前な、正規表現で表せねー機能拡張するんじゃねーよ、ボケが。
機能拡張だよ、機能拡張。
なんか文字クラスかあるし。
よーしパパ繰り返し回数指定サポートだー、とか言ってるの。
ここでぶち切れたね。
正規表現はな、状態数有限、男同士でケツを挿すか挿されるか
そこがいーんじゃねーか、状態数爆発させる奴はすっこんでろ。
あのな、E{8}で8回繰り返すなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何がPerlの拡張正規表現だ。
お前は本当に前処理展開が必要なのかと問い詰めたい。
小一時間問い詰めたい。
0145sage01/11/17 22:57ID:???
>144
端折らないでちゃんとやってよ〜。
0146名無しさん@お腹いっぱい。01/11/18 00:31ID:???
>>143
[0-9a-z]{1,8}
014714301/11/18 02:39ID:???
ありがうとざいました
0148名無しさん@お腹いっぱい。01/11/18 02:44ID:???
マジでこれだけだったのか・・・
何かネタかと思ったが
0149名無しさん@お腹いっぱい。01/11/18 03:00ID:???
>>148 何が?
0150名無しさん@お腹いっぱい。01/11/18 04:31ID:???
何がって(゜∀゜)! ヒャヒャヒャ
BBSに削除機能付けるから仕方なくって所だな。。。
0151ひ‎ろゆき@管‎直人01/11/18 04:41ID:???
ワケワカラン
0152名無しさん@お腹いっぱい。01/11/18 13:41ID:???
>147
「バオー来訪者」に出てきた九官鳥のほうが正しくお礼を言えてるぞ。
0153名無しさん@お腹いっぱい。01/11/18 17:44ID:???
>>152
オモロイ
0154名無しさん@お腹いっぱい。01/12/12 17:13ID:???
"c:\Program Files\hoge.exe" "c:\Program Files\hankaku.mp3" "c:\Program Files\全角.mp3"

c:\Program Files\hoge.exe
c:\Program Files\hankaku.mp3
c:\Program Files\全角.mp3
を抽出する方法キボンヌ

m/"\S.*?\S"/g
だと
"c:\Program Files\hoge.exe"
にヒットします.
"なしでヒットする方法キボンヌ(後方参照を使わずに)
0155名無しさん@お腹いっぱい。01/12/12 17:22ID:9gYD63hd
$hoge =~ s/あめぞう/だめぞう/g;
0156名無しさん@お腹いっぱい。01/12/12 18:22ID:???
/\w:[^"]+/g でどう?
0157名無しさん@お腹いっぱい。01/12/12 18:35ID:???
スンバらしい!!
目がうろこ

じゃあ
"hoge\\asdf\"hage"
から
hoge\\asdf\"hage
を抜き出す方法って無い?
0158名無しさん@お腹いっぱい。01/12/12 18:38ID:???
>>157
そういうファイルがあるってこと?
ファイル名に使えない文字だよ?>"
0159名無しさん@お腹いっぱい。01/12/12 18:50ID:???
ファイル名じゃなくて単純に文字列です.
0160名無しさん@お腹いっぱい。01/12/12 19:17ID:???
>>159
じぶんではやろうとしないんだね。。

/(?:").+(?!"\s)/
0161名無しさん@お腹いっぱい。01/12/12 21:16ID:???
もう出てるのかもしれないけど
foreach my $n (2..100) {
my $number = '1' x $n;
print "$n\n" if $number !~ /^(11+)\1+$/g;
}
「ほう、正規表現でこんなんできんのかいなー」と思ったコードでした。
0162デフォルトの名無しさん01/12/12 22:31ID:???
正規表現だとめっちゃ遅そうだね  (^ー^;
0163名無さん@お腹いっぱい01/12/12 23:48ID:3swbdtRp
バックスラッシュでエスケープできる空白で区切られた文字の切り出し。


$_ ='today is monday. tomorrow\ is\ tuesday. I\ hate\ \\\\\\';

while( /\s*((?:\\\S|\\\s|\S)+)\s*/g ){
push( @x, $1 );
}

print join( "\n", @x ), "\n";

切り分けてからバックスラッシュを除去するタイプ。
まとめてやっちゃえないかな。
0164名無しさん@お腹いっぱい。01/12/13 00:07ID:???
正規表現の起源をさかのぼるとどこまで行きますか?
0165名無しさん@お腹いっぱい。01/12/13 00:10ID:???
インダス文明
0166名無しさん@お腹いっぱい。01/12/13 00:12ID:???
>>165
そこまで古くない
0167名無しさん@お腹いっぱい。01/12/13 00:37ID:???
メソポタミア文明
0168名無しさん@お腹いっぱい。01/12/13 01:30ID:???
かつてヒッタイト人は正規表現に悩まされ海に沈んだ
0169JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/13 03:25ID:???
>>163

求めているものとは異なると思うけど。
s{\s*((?:\\\S|\\\s|\S)+)\s*}{push @x, $1; $x[-1] =~ s/\G([^\\]*)\\(.)/$1$2/g}eg;
0170名無しさん@お腹いっぱい。01/12/13 07:49ID:kld8XmGB
>>169
s///の中にs///いれちゃうってのがおもしろい。
級数的に遅くなっちゃうんだろうけど...
0171名無しさん@お腹いっぱい。01/12/13 07:53ID:kld8XmGB
>>169
二つ目は s/\\(.)/$1/g で良いような。

my %escape = ( n => "\n", r => "\r"... );

s{\s*((?:\\\S|\\\s|\S)+)\s*}{push @x, $1; $x[-1] =~ s/\\(.)/$escape{$1}||$1/eg}eg
0172名無しさん@お腹いっぱい。01/12/13 08:01ID:kld8XmGB
というか、ようするにタグの属性の'='より後を処理したかったわけで。

# だぶるくおーと
s{\s*"((?:\\[^"]|\\"|[^"])+)"\s*}{push @x, $1; $x[-1] =~ s/\\(.)/$escape{$1}||$1/eg}eg
# しんぐるくおーと
s{\s*'((?:\\[^']|\\'|[^'])+)'\s*}{push @x, $1; $x[-1] =~ s/\\(.)/$escape{$1}||$1/eg}eg

ひとつにまとめたーい
\s*('|")((?:\\[^\1]|\\\1|[^\1])+)\1\s*
うーー。[^\1]って動くのか?
今Perlなし環境なんでためせん....
0173JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/13 08:50ID:???
たしかに s/\\(.)/$1/g で十分っぽい。
何やってるんだろ。

ちなみに、HTMLでは属性値の "..." 内に 「"」を入れたいときには「\"」を
使いません。もちろん、「\n」と書いても改行にはなりません。

あと、欲張りではない .*? とか .+? を使うともう少し簡単に書けそう。
('|") は ['"] と書いた方が微妙に良いかも。

----
どうせなら思い切りトリッキーに
s{\s*((?:\\.|\S)+)\s*}{($x[@x] = $1) =~ s/\\(.)/$1/g }eg;
とか。:-p

# 良く考えたら \\\S|\\\s って \\. ですよね。

そろそろ寝ます。
0174名無さん@お腹いっぱい01/12/13 10:04ID:MWbyUPNC
>>173
" を使うのが正解なのかな?

<a title="get it from \"snake hole\"">spank spank</a>
<a title="get it from "snake hole"">spank spank</a>

改行を含める場合はどうしたらいいんだろう...

正規表現パート。
('|") と ['"] はどう違うんだろう。
選択と文字クラス(?) の違い?
諸説正規表現あたり読むとわかるんだろうか。

とりあえず、.+? を使って、

\s*['"]((?:\\.|.)+?)\1\s*

にすることにしました。イロイロサンクス!
0175名無しさん@お腹いっぱい。01/12/13 10:05ID:???
>>174
&quot;を使うのが正解です。
017617401/12/13 10:59ID:MWbyUPNC
>>175
あれー? & と quot と ; を書いたはずなんだが... 2ch だと変換されちゃうのか。

もう一個。

今日は(*そりゃもう死ぬほど(ってほどじゃないけど))寒い。

みたいなので、 "(*" から ")" まで一発でマッチさせることって出来ないかな。
ネストしてた場合ってループで処理するしかないのだろうか...
0177JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/13 16:38ID:???
>>174

> 改行を含める場合はどうしたらいいんだろう...

<a title="Mermione
moe">hoehoe</a>

とか。

> ('|") と ['"] はどう違うんだろう。
> 選択と文字クラス(?) の違い?

です。後者の方がバックトラックが発生しないので効率が良いです。
(この場合はそれほど違いは無いですけど。)

>>176

perl5.6以降限定作戦。

$_ = "foo (Hermione (Emma Watson) moe) bar";
$regex = qr/\((?:(??{$regex})|.)*\)/;
($match) = /($regex)/;
print "$match\n";
017817401/12/13 19:54ID:???
>>177
そろそろ尊敬しちゃっていいですか?

でも、
% perl -v
This is perl, version 5.004_05..

なので、諦めて寝ます。
0179JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/13 21:54ID:???
ちと訂正。
$regex = qr/\((?:(??{$regex})|.)*?\)/;
($match) = /($regex)/;
こうしないと欲張りマッチになってしまう。

2重まで限定で良ければ、($match) = /(\((?:\(.*?\)|.)*?\))/;
3重まで使いたければ、($match) = /(\((?:\((?:\(.*?\)|.)*?\)|.)*?\))/;
ってのはダメ?
もちろん、(??{ CODE }) 使った方は何重でも使えます。
0180ぴこ01/12/14 02:30ID:LSCy87gy
 文字列の先頭に有る全角スペース&スペース&改行を
無くすには、どうすればよいのでしょうか?

$piko =~ s/^[.\n\s ]*//g;

 これで無くすと?がHに化けてしまうんです・・・
0181名無しさん@お腹いっぱい。01/12/14 03:06ID:???
>>180
同じくらいのレベルの俺だけど…
$piko =~ s/^(?:\s| |\n)+//g;
0182ぴこ01/12/14 03:34ID:LSCy87gy
>>181
 おぉお〜出来ました感動です!
かなり不安でしたが2chに書き込みしてみてよかったです。

 自分の勉強不足が身にしみました
ただ、全角スペースが||で囲まれている理由が
全く分らないのでCGI&Perlポケットリファレンスを
片手に、がばってみます。

 このような質問に丁寧に答えていただき
真に有難う御座いました。
0183JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/14 03:56ID:???
ちなみに、理由は...

$piko =~ s/^[.\n\s ]*//g;
これは、ソースコードが Shift_JIS で書かれている場合、
$piko =~ s/^[.\n\s\x81\x40]*//g;
と等価になります。

で、さらに言うと、

* (いわゆる) 全角スペースは Shift_JIS で "\x81\x40" です。
* Perlでは原則的に文字列をバイト単位で扱います。
* "?" は Shift_JIS で "\x81\x48" です。

頑張ってください。

あと、このままだと先頭の "." まで削除しちゃいます。
# 文字クラス [...] 中では多くのメタ文字はそのメタ性を失うため。

----
あと、本は少し高いけど「プログラミングPerl改訂版」が良いと思います。(
中身はperldoc に全部載っていますが、本の形態である方が最初のうちは何か
と便利です。)
018417401/12/14 13:56ID:eAyIvKrj
>>179
やりたいことってのは、
普通の文章の中にあらわれる (...) を切取るって作業なんです。
でも、普通の文章の場合、(...) の中に単体で '(' とか ')' が出ることもあるか...
諦めます。
0185名無しさん@お腹いっぱい。01/12/18 00:11ID:lPs5lnwv
正規表現で「宣教師と・・・」みたいな(名前忘れた)パズルを解くのが
あるってどこかで見て一度見てみたいんだけどgoogleで調べても出てこない。
だれか、コード or コードを載せてあるページ知ってる人いない?

恥ずかしながら、どうやって解いているのか見当もつかない。
0186名無しさん@お腹いっぱい。01/12/18 00:31ID:???
恥ずかしながら、何を言っているのか見当もつかない。
0187名無しさん@お腹いっぱい。01/12/18 00:39ID:???
>>186
人食い族と宣教師がボートに乗って川を渡る
とかいうやつじゃないの?
0188名無しさん@お腹いっぱい。01/12/18 01:14ID:???
>>186
スマン。
問題書いてなかったね。

3 人の宣教師と 3 人の人喰い土人が川の左岸にいます.
1 隻の 2 人乗りボートを使って,
右岸に渡るにはどうすれば良いでしょうか?
ただし土人の人数が宣教師の人数よりも多くなると,
宣教師は喰われてしまいます

という問題。
0189名無しさん@お腹いっぱい。01/12/18 01:52ID:???
>>187 >>188 ぁ、わかった。けど、肝心のサイトを知らないな…。
0190名無しさん@お腹いっぱい。01/12/18 02:36ID:???
http://pc.2ch.net/test/read.cgi/php/991313362/
でプログラム技術板で解いてたとか。(18,52あたり)
ちょっと違う問題っぽいけど。
肝心のムの板スレは見つからず・・・
019119001/12/18 02:41ID:???
ムの板スレ・・・ → ム板のスレ
0192名無しさん@お腹いっぱい。01/12/19 00:58ID:???
>>190
おもしろそうだから探してみたけど見つからなかった (-v-;
正規表現のコンパイラを上手く使って分岐するのかな?
と言うかこの問題ニ分木で解いたけど難しかった。。。
0193名無しさん@お腹いっぱい。01/12/19 19:57ID:iZmRvdOP
アクセスログ解析でUserAgentを見てみるとあきれるほどMSIEのバージョン違いが多くて
まとめようと思いました。IEのバージョンとwinのバージョン以外は無視するつもりで
/MSIE.*5\.5.*Windows.*98/
とやっても
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
などにマッチしてくれません。正規表現道場の師範の方々にご教授願いにあがりました。

環境はActivePerl(perl5.6.1 built for MSWin32-x86-multi-thread) on Windows2000proです。
一応分け方としてはMSIE5.01, 5.0, 5.5, 6.0とWindows 95, 98 ,NT5の組み合わせを
考えています。

#それにしてもヴァージョン違いの多さにあきれてしまいます。そういえばMeがでてきません。
#98の3rdエディションともでていなかったけど
0194名無しさん@お腹いっぱい。01/12/19 20:11ID:1HBNd19Z
>>190
最短は何手なの?
自分も解いてみたけど13手だった。
0195JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/19 20:56ID:???
>>193
マッチしますが?
0196名無しさん@お腹いっぱい。01/12/19 21:53ID:FzZSVld0
>193
コーディングの問題でした。
処理が下に抜けていた。

修行し直します。
0197名無しさん@お腹いっぱい。01/12/20 17:08ID:???
ある正規表現にマッチするような文字列を自動生成する方法ってなんかある?
例えば、/\d+/とかだったら、0、/\d+\w+/だったら、0aとか。
0198JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/20 18:04ID:???
一般的には無理です。
0199名無しさん@お腹いっぱい。 01/12/20 23:34ID:???
コンパイラを書く、で、途中で挫折これ最悪(って訳でも無い,,)
0200名無しさん@お腹いっぱい。01/12/20 23:46ID:dNXMf8EI
>>188
ちょっと違うけど。

問題クレクレ
http://piza.2ch.net/tech/kako/989/989687023.html

船渡し問題
http://piza.2ch.net/tech/kako/990/990503990.html

スクリプト
$_='i=FMBBGGSD;@n=(F,M,B,G,S,D);Yp{_X!(/D/&!/S/&/[^D]/|/F/&/G/&!/M/|/M/&/B/&!
/F/)}Yz{_X!_|/[FMS]/}Yr{aXbXp(a)&p(b)&p(a.b)&z(b)}Yt{my(@o,c,d,e,f,g,h,i,j);c=k
%2;e=iXf=jXif(c&!f){push@m,join"\n",@l,k,"";return}_=e;y/FB/MG/;return if Z&Z<=
k;Z=k+1;@o=(@n,"");for g(@n){shift@o;for h(@o){e=i;d=g.h;f=j.d;next if e!~s/g//
|h&e!~s/h//|!r(e,d);a="e->d j";a="j d<-e"if c;push@l,a;k++;t(f,e);k--;pop@l;}
}}t i;print@m,@m+0';s/X/=shift;/g;s/Y/sub /g;s|Z|\${c}{join"",sort split//}|g;s
/[|&]/$&$&/g;s/\b[_-k]\b/\$$&/g;eval
0201名無しさん@お腹いっぱい。01/12/21 02:38ID:???
やっぱ無理か。
■ このスレッドは過去ログ倉庫に格納されています