preg_matchの挙動について質問させてください。
URLのクエリパラメータをpreg_matchも用いて一致するか確認したいです。
●対象文字列
s3=aaa&s5[]=aaa
●コード
$array = array( 's3' => 'aaa', 's5[0]' => 'aaa' ); $str = urldecode( http_build_query( $array ) ); $pattern = '/s3=.+&s5[.*]=.+/'; var_dump( preg_match( '/s3=.+&s5[.*]=.+/', $str ) ); var_dump( preg_match( '/s3=.+&s5[.*]=.+/', 's3=aaa&s5[]=aaa' ) );
●結果
上のdumpは int 0 下のdumpは int 1
●試してみたこと
http://okumocchi.jp/php/re.php ↑のサイトで確認した場合では問題ありませんでした。 var_dump( $str == 's3=aaa&s5[0]=aaa' ); ↑の結果はfalseになりました。
よろしくお願いいたします。
<?php
$str = 's3=aaa&s5[]=aaa';
$result = preg_match( '/s3=.+&s5\[.*\]=.+/', $str );
echo $result;
1
になりますよ。
※$strには対象文字列が格納されています。
本当に格納されているか、直前にvar_dump等を用いて確認しましたでしょうか?
>yuuyu
はい、もちろん確認しております。
質問内容を修正いたしました。
よろしくお願いいたします。
> var_dump( $str == 's3=aaa&s5[0]=aaa' );
↑の結果はfalseになりました。
では$strには's3=aaa&s5[0]=aaa'が入っていない、ということですよね?
$str = urldecode( http_build_query( $array ) );
から
var_dump( preg_match( '/s3=.+&s5\[.*\]=.+/', $str ) );
の間に$strを操作するコードが含まれていないか一度確認してみてください。
回答1件
あなたの回答
tips
プレビュー