• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現で数値から始まりYを1字以上含む文字を判別)

正規表現で数値から始まりYを1字以上含む文字を判別

このQ&Aのポイント
  • PHPで正規表現を使用して、数値から始まりYを1字以上含む文字を判別する方法を教えてください。
  • 条件として、数値の最初の文字は「1~9」であるとし、2番目の文字は数値ではないことです。
  • また、検証する文字列には、数値、英字、日本語文字列、漢字、記号などが含まれる可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じです <?php mb_internal_encoding("UTF8"); $a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E"); $pattern="/^[33].*[ee]/i"; foreach($a as $val){ print $val; if(preg_match($pattern,$val)){ print "=&gt;〇<br>"; }else{ print "=&gt;×<br>"; } } ?>

kiseki777
質問者

お礼

回答ありがとうございます。 <?php mb_internal_encoding("UTF8"); $a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E"); $pattern="/^[33].*[yy]/i"; foreach($a as $val){ print $val; if(preg_match($pattern,$val)){ print "=&gt;〇<br>"; }else{ print "=&gt;×<br>"; } } ?> eeの場合は正しく結果が出ましたが、 yyやkkにしてみるとしっかり動きませんでした。 3eiklあいうeE=>〇 4yyte=>× 3rrEき134=>〇 Eresry=>× 3我Ea=>× 3aaaa=>× 3e=>〇 5Eお=>× 3E=>〇 3 E=>×  3E=>×

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

よく考えたら・・・ ファイルがutf8ではない形式で保存されている可能性が高い。

kiseki777
質問者

お礼

その通りでした。ファイルをutf-8で保存してみると解決しました。ありがとうございます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

対象文字列がマルチバイト文字であれば、mb_regex_encoding('utf-8') + mb_ereg_match の方がいいのでは? http://jp2.php.net/manual/ja/function.mb-ereg-match.php というか、このくらいの判定なら、正規表現にこだわらないほうが楽じゃないですかねぇ。 function str_check($str, $chk1='3', $chk2='Y') { if (mb_substr($str,0,1) !== $chk1) { return false; } if (mb_strpos($str, $chk2) === false) { return false; } return true; } mb_substrやmb_strposは(指定しなければ)mb_internal_encodingに従います。

kiseki777
質問者

お礼

こういうやり方もできるのですね。 でも、大文字に対応させるには追加必要ですね。 こちらも参考にさせて頂きます。 ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>mb_internal_encoding("UTF8"); mb_internal_encoding("UTF-8"); でいけるかもしれません。 (OSがよくわからないですがさすがにiconvでUTF-8は組み込まれていますよね?)

kiseki777
質問者

お礼

ファイルをutf-8で保存できていなかったのが原因のようです。 解決しました。ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ああ、ごめんなさい 修飾子は「ui」ですね $pattern="/^[33].*[ee]/ui";

kiseki777
質問者

お礼

すみません。 Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3 in  が物凄く出てきます。php5.2を使っていますがバージョンと関係ありますか? <?php mb_internal_encoding("UTF8"); $a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E"); $pattern="/^[33].*[yy]/ui"; foreach($a as $val){ print $val; if(preg_match($pattern,$val)){ print "=&gt;〇<br>"; }else{ print "=&gt;×<br>"; } } ?>