• ベストアンサー

eval

if (preg_match("/aaa/", "aaa")) { print 'aaa'; } のevalを if (eval('preg_match("/aaa/", "aaa")' . ';')) { print 'aaa'; } のようにしてみたのですが、間違っていました。 evalで書くとどうなるんですか?

  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.1

eval("if (preg_match(\"/aaa/\", \"aaa\")) { print 'aaa'; }"); eval("if (preg_match('/aaa/', 'aaa')) { print 'aaa'; }"); など。

ninmurai
質問者

お礼

ありがとうございました。

関連するQ&A

  • eval文中の+

    Perlのeval文で、 $str='hoge'; eval "print+$str"; とすると「hoge」と出力されます。 このとき+はスペースとして扱われているようなのですが、 そのことについてマニュアルなどに記載されていないようです。 eval "print+1+2"; の場合はちゃんと3と表示されるし、 きっとevalのほうで+を適当に解釈してるんだと思いますが、 それであってるんでしょうか。 またこのようなeval中で特殊に評価される文字があるのでしょうか。 できれば関連文献などを教えていただけるとなお嬉しいです。 マニュアルを見落としてる可能性もあるなあ。 そうだったら恥ずかしい。^^;

    • ベストアンサー
    • Perl
  • eval関数について

    MySQLのSQL文作成のため、 以下のような変数をforとevalを使用して置き換えしたいのですが -------------------------------------------- $a01_sql = " aaa_t.bbb_c ='".$area01."'"; $a02_sql = " aaa_t.bbb_c ='".$area02."'"; $a03_sql = " aaa_t.bbb_c ='".$area03."'"; return $a01_sql.$a02_sql.$a03_sql; -------------------------------------------- これをfor文を使って以下のように記述↓ -------------------------------------------- for ($i = 1 ; $i <= 3 ; $i++ ){ if ($_GET["a0".$i.""] == "on") { eval("\$area0".$i."_sql = \"objectdetail_t.kuiki_c = \'\$area0".$i."\'\"\;"); } return eval("\$a0".$i."_sql"); } -------------------------------------------- パースエラーとなってしまい、実現できません。 元々の変数が他の変数を使用しているものでややこしくなっていますが どなたか教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • 特定の文字列が含むときに、専用の処理をさせたい

    最後に「_asc」「_desc」をつけた文字列がいくつかあります。 それを$_GET['aaa']で送り、そこから ・「_asc」「_desc」を削除した文字列だけにし ・「_asc」ならascという文字列を$mmmに「_desc」ならdescを$mmmに ということをしたいです。 $str = "id"; $mmm = 'asc'; if(isset($_GET['aaa'])){ $str = $_GET['aaa']; if(preg_match("/_asc$/i", $str)){ $str = rtrim ($str, "_asc"); }else if(preg_match("/_desc$/i", $str)){ $str = rtrim ($str, "_desc"); $mmm = 'desc'; } } このようにしてみたのですが、上手にできませんでした。 もっといい方法はないでしょうか。

    • ベストアンサー
    • PHP
  • クーロンであるファイル名に特定文字列があるかをチェックする

    あるディレクトリ内(./)のファイルをチェックし、特定の文字列(".aaa"と"cccc"の両方)があるかをチェックし、その特定の文字列が含まれるファイルがあればあるメールアドレス宛(xxx@mmm.com)にメールを送信するスクリプトを考えています。下記スクリプトの☆☆☆のところにその関数が入ると思うのですが、自力では解決不能なためご教授願います。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.aaa/",$file)) { if(preg_match("/cccc/",$file)) { ☆☆☆ } } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • 正規表現のコーディングについてお願いします。

    こんにちは、よろしくお願いいたします。 正規表現パターンを書く場合に皆さんがどのようにされているか教えてください。 例えば(ちょっとムリヤリ感が強いですが)、'Price \5800-' という文字列の \5800 の部分に preg_match でマッチさせたいとします。 単純に考えると、 /\\\d+/ のようなパターンが思いつくのですが、それを文字列として preg_match に渡す際に、コードはどのように書かれますか? <?php   $str = 'Price \5800-';   //とりあえず、'/\\\d+/' と書き、'/\\\\\\d+/' と、\ をそれぞれの \ に書き足す   if ( preg_match('/\\\\\\d+/', $str, $match) ) {     print_r($match);   } ?> 「まず、パターンを書き、全ての \ の前に \ を書き足す。」というのが無難なのかな?と思い、そうしていますが、 そういった考え方で間違っていないでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • preg_match_allで取得データをDBへ

    質問:preg_match_allで取得したデータをDBへ格納したいです。 記述文 $pattern = "|HREF=.*?\>|"; preg_match_all($pattern,$str,$match); 補足: $pattern で指定範囲を書いてます。 $str には $patternでとってくる参照データ先が入ってきます。 print_r($match); で念のためブラウザに吐き出すと Array ( [0] => Array ( [0] => HREF="AAA"> [1] => HREF="../../../../Top"> 以下省略 取得したい範囲が取れていることは確認できました。 目的は、とってきた [0] => HREF="AAA"> [1] => HREF="../../../../Top"> : =>より先の文字列が、DBの1つのレコードに1つずつ入っていくイメージです。 アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • http://とhttps://のどちらでもマッチングできる正規表現

    http://とhttps://のどちらでもマッチングできる正規表現の書き方が分かりません。aタグの中のhref="のあとのURL部分にhttpでもhttpsのどちらでもOKのマッチングをかけたいです。 具体的にはhttp://www.aaa.co.jpでもhttps://www.aaa.co.jpのどちらでもpreg_match_allでマッチングをかけたいです。 $count=preg_match_all("正規表現",$URL,$maches); という感じでhttpかhttpsのURLに引っ掛けたいです。 教えてください

    • ベストアンサー
    • PHP
  • evalの中でNULLを使用して比較したい

    PHP5.2.4を使用しています。 次のようなevalを使って式を評価させたいのですが、 NULLを比較させると Parse error: syntax error, unexpected T_IS_NOT_EQUAL in test.php(11) : eval()'d code on line 2 というようなエラーがでてしまいます。 どうすればevalの中でこの条件式を成立させることができるのでしょうか? $left = NULL; $right = 1; $str = ' if('.$left.' != '.$right.') { print "not<br>\n"; } '; eval($str);

    • ベストアンサー
    • PHP
  • 【PHP】「ereg_match」はなぜ不人気なのか?

    PHP初心者です。 現在ファイルの中を英語や日本語で検索するプログラムを作っています。 検索といえば「preg_match」が一番人気あるように見えます。しかしたとえば、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); if(preg_match( '/我輩は.である/' ,'我輩は猫である')){ print "マッチ!"; } 上記のような使い方をすると「.」は「猫」にマッチせず「...」にするとようやくマッチします。「preg_match」はマルチバイトに対応していないのでしょうか。 そこでマルチバイトと正規表現に対応した検索関数「mb_ereg_match」を知りました。 if(mb_ereg_match( '我輩は.である' ,'我輩は猫である')){ これなら正常にマッチします。 がしかし… 「mb_ereg_match」は全然辞書に載ってません。分厚いPHP辞書をいくつも持ってますが「ereg_match」すら載ってません。何か不人気の理由があるのでしょうか?気に入ったのに不安で使えません。 お詳しい方、解説よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPで似たコードを繰り返す場合の簡潔な書き方??

    ご質問失礼します。 PHPでデータベースのデータを下記のようなコードを使い表示しています。 ※質問内容に該当する一部のみ記載させていただいています ・ ・ ・ ・ ・ if(preg_match("/新規/", $row['status1'])){ $table .= $row['status1']." 新規です"; } else { if(preg_match("/更新/", $row['status1'])){ $table .= $row['status1']." 更新です"; } else { if(preg_match("/削除/", $row['status1'])){ $table .= $row['status1']." 削除です"; } else { $table .= "いません"; } } } if(preg_match("/新規/", $row['status2'])){ $table .= $row['status2']." 新規です"; } else { if(preg_match("/更新/", $row['status2'])){ $table .= $row['status2']." 更新です"; } else { if(preg_match("/削除/", $row['status2'])){ $table .= $row['status2']." 削除です"; } else { $table .= "いません"; } } } if(preg_match("/新規/", $row['status3'])){ $table .= $row['status3']." 新規です"; } else { if(preg_match("/更新/", $row['status3'])){ $table .= $row['status3']." 更新です"; } else { ・ ・ ・ ・ ・ ・ status1から、5つあればstatus5まで、似たようなPHPを繰り返し書いて動作させています。 このような場合、簡潔に書く方法などありますでしょうか。 ご存知の方いらっしゃいましたらお時間のある際にお教え下さいませんでしょうか。 また、簡潔に書く方法がない場合でも無いとお教えいただければ幸いです(○ `人´ ○)

    • ベストアンサー
    • PHP

専門家に質問してみよう