UTF-8で正規表現

2009/06/15 | PHPで正規表現

入力チェックの際に、カナ入力のチェックをすることになった。何をいまさらという感じだが、以前カナでチェックをかけたのは何年前のことだろう。で、例によってはまったのでメモ。

preg_match(‘/ァ-ヶー/’,$str);

最初は上記のように記述してみて、なんとなくOKっぽい感じだった。いざテストの段になって、いろいろ入力してみたら、うまく通らないカタカナがある・・・ってすごくたくさん・・・。「チ」「ツ」「テ」「ト」「ナ」「ニ」「ヌ」「ネ」「ノ」・・・。ぜんぜんだめじゃん。

ちょっと調べて回答を見つけて、ようやく思い出した。preg_matchでUTFな文字列を調べるときは注意事項があったことを。

preg_match(‘/ァ-ヶー/u’,$str);

「u」オプションが必要だった。これにて解決。

正規表現でhtmlからのタグ抽出

2007/08/09 | PHPで正規表現

<div>ab</div><div>cd</div><div>ef</div>

こういう文字列があるとする。ここから正規表現でab、cd、efという文字列を抽出したいのだが、正規表現の記述で悩んだのでメモ。

(1) 最初はこのような正規表現を書いてみた。
!<div>(.*)</div>!

しかしこれだとなぜか一番最初の<div>と一番最後の</div>にマッチしてしまう。なぜ?。

(2) そこで数時間調べに調べてこんな正規表現に行き着いた。
!<div>(.*?)</div>!

見てのとおり「?」が一つついただけ。しかしたったそれだけで期待する結果を配列で得ることが出来た。「.」は任意の1文字で「*」は0回以上の繰り返し、「?」は0回または1回で「()」はパターンを表す・・・。で結局「(.*)」と「(.*?)」とでは何が違うのか・・・全然わからない。

まだまだ修行が足りないということなのだが、両者の違いを明確に教えていただける人がいれば、是非解説をお願いします。

URLの正規表現

2007/04/14 | PHPで正規表現

URLを正規表現で記述する方法のメモ(どこかのウェブで以前見つけたものだけど、出典がどこかわからない)。でも、たしか、これだと不十分。しっかり、みっちりRFCにのっとって書くと、この10倍くらいの量になったはず。

$pattern='(https?|ftp)(:¥/¥/[-_.!~*¥'()a-zA-Z0-9;¥/?:¥@&=+¥$,%#]+)';

上記正規表現の出展元にお気づきの方、いらっしゃいましたらご一報ください。
リンク張らせていただきたいので。

正規表現のメタ文字

2006/04/27 | PHPで正規表現

とりあえず、よく使うメタ文字のメモ。

. 改行を除く任意の1文字
* 0回以上の繰り返し
+ 1回以上の繰り返し
? 0回または1回
^ 先頭
$ 末尾

守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net