Home > PHP > PHPトリビアルメモ2(正規表現)

PHPトリビアルメモ2(正規表現)

  • 2007-07-19 (木) 23:07
  • PHP

正規表現でちょっと気になったのでメモ。

1.ダブルクオートとかシングルクオートとか


$string = " abcd123  xyz !#%";

$splitted = preg_split("/\\s+/", $string);
var_dump($splitted);

$splitted = preg_split('/\\s+/', $string);
var_dump($splitted);

$splitted = mb_split("\\s+", $string);
var_dump($splitted);

結果は全部下。ダブルクオートだろうが、シングルクオートだろうが関係ないらしいですよ。\\の数。


array(4) {
  [0]=>
  string(0) ""
  [1]=>
  string(7) "abcd123"
  [2]=>
  string(3) "xyz"
  [3]=>
  string(3) "!#%"
}

2.\\のマッチング
なんで1.のようなことを気にしたかというと、PHPマニュアルに

注意: シングルクォートあるいはダブルクォートで囲まれた PHP の 文字列 の中では、バックスラッシュは特別な意味を表します。 そのため、正規表現 \\ を使用して \ とマッチさせたい場合は PHP のコード内では “\\\\” あるいは ‘\\\\’ と記述する必要があります。

って書いてあったから。え、4つもいるの?ってわけでやってみたら、4ついりました。


$string2 = '\\\\';  // バックスラッシュ2つ

if (preg_match('/\\\\\\\\/', $string2, $matches)) {  // バックスラッシュ4つ
	echo "match:". $matches[0] . "\\n";
}

結果。(バックスラッシュ1個)


match:\\

これは実は、例えば先日書いたGRETAでも同じことです。バックスラッシュはエスケープに用いられるため、バックスラッシュ自体のエスケープが必要で、クオート内のバックスラッシュ2個重ねてはじめて正規表現の世界でバックスラッシュ1個分の意味を成すわけです。つまり、’\\\\’とソース上はバックスラッシュ4個でも、メモリ上は’\\’とバックスラッシュ2個ということになります。正規表現の世界でもバックスラッシュはエスケープ文字として使われるため、これで初めてバックスラッシュ1個をあらわす正規表現となると思われます。(意味が通じているか心配)
なわけで、1.でやってる”\s”が気になりました。正規表現の世界で空白文字を表すには”\s”なわけですから、1.では本当は”\\s”と書くべきなんじゃないのか?と、そこで、

3.\\wのマッチング


$string = " abcd123  xyz !#%";

if (preg_match('/\\w+/', $string, $matches)) {
	echo "match:". $matches[0] . "\\n";
}
if (preg_match('/\\\\w+/', $string, $matches)) {
	echo "match:". $matches[0] . "\\n";
}

結果。


match:abcd123
match:abcd123

どっちでもよかった。意味がわからん。誰か教えてください。

以上

Comments:4

o-taki 07-07-23 (月) 17:26

文字列リテラルでバックスラッシュを表現するには基本的に2個重ねるのだが,後ろに来る文字によっては1個でも構わないという罠らしい.

[よくわかる解説]
http://d.hatena.ne.jp/x768/20060607

コスミー 07-07-23 (月) 21:00

うおぉ!何打この罠は!
>ただし,後ろに来る文字によっては1個でも構わないが,不規則なので間違えやすい。
なるほど、納得した。やっぱPerlだな。

レベッカミンコフ ショルダーバッグ/クラッチバッグ/ハンドバッグ REBECCAMINKOFF HS15 15-08-27 (木) 3:16

http://blumunki.com/css/60.htmlレベッカミンコフ バッグ REBECCA MINKOFF HF14ISSS01 375 AMOROUS SATCHEL ショルダーバッグ PETROL/LIGHT GOLD【new1010】:1&one

【jg】REBECCA MINKOFF レベッカミンコフ バッグ チェーンバッグ キルティング 本革 ミ 15-08-27 (木) 3:16

http://www.e-f-munkegaarden.dk/a/73.htmlレベッカミンコフ バッグ REBECCA MINKOFF HF34IFCX02 609 MINI 5ZIP ショルダーバッグ BURGUNDY/LIGHT GOLD【new0131】:1&one

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=61
Listed below are links to weblogs that reference
PHPトリビアルメモ2(正規表現) from コスミー報告書[社外秘]

Home > PHP > PHPトリビアルメモ2(正規表現)

Search
Feeds
Meta
 合計:019091
 今日:0084 昨日:0146

Return to page top