• ベストアンサー

パターンを取得する。

あるテンプレートファイルから指定された要素を抜き出したいと思います。 $file_data = "aaa {test} sdasda {nana} "; こういうデータがあって、「{}」で囲まれた名前を 取得したいと思います。 (例の場合は「test」と「nana」) どうすればよいでしょうか?

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

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

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

正規表現得意じゃないのでもっといい案がある はずですが、とりあえず以下のようにやればできます。 <?PHP $file_data = "aaa {test} sdasda {nana} "; preg_match_all("/{.[^}]*}/",$file_data,$out); print_r($out); ?> 入れ子とか絶対ないとか保証あるんでしょうか? $file_data = "{test{aaa}} "; でやると{test{aaa}が帰ってきますけど・・・

chikuwa_chan
質問者

補足

ありがとうございます。 今調べたんですが、入れ子ではないですが{が入ることがあるみたいです。 例:$file_data = "aaa{test}kena{asje{nyan}siw"; こんな感じです>_<

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

// 一応動きます。 $str = 'aaa {test} sdasda {nana}'; $ob = ''; for ($i = 0; $i < strlen($str); $i++) {  if ($str[$i] == '{') {   $obStart = 1;   $ob = '';  } elseif ($str[$i] == '}') {   echo $ob;   $obStart = 0;   $ob = '';  } elseif ($obStart == 1) {   $ob .= $str[$i];  } }

chikuwa_chan
質問者

お礼

ありがとうございます。 この方法でも試してみます

関連するQ&A

  • VB ログファイルからデータを時間毎に取得したい

    VBでログファイルからデータを1行ずつ読み取り、 1時間毎と1秒毎の件数を取得したいです。 ログファイルは下記のように数千行のデータが存在します。 1 | 20140306 07:12:34 , TEST_A , AAA , 001 2 | 20140306 07:12:34 , TEST_A , BBB , 001 3 | 20140306 07:15:01 , TEST_A , BBB , 001 4 | 20140306 08:12:34 , TEST_B , CCC , 002 5 | 20140306 08:20:30 , TEST_A , CCC , 002 6 | 20140306 08:20:30 , TEST_A , CCC , 002 7 | 20140306 08:20:30 , TEST_A , CCC , 002 8 | 20140306 09:12:33 , TEST_A , AAA , 003 9 | 20140306 10:15:47 , TEST_A , BBB , 004 10 | 20140306 10:15:47 , TEST_B , BBB , 004 ・ ・ ・ 条件は、データに「TEST_A」と言う文字列が含まれている事です。 この場合、まず1時間毎の件数を取得して 指定のセルに表示させます。 7:00 | 3 8:00 | 3 9:00 | 1 10:00| 1 そして、その時間毎の秒間最大件数を取得して 指定のセルの表示させたいです。 7:00 | 2 8:00 | 3 9:00 | 1 10:00| 1 何卒、よろしくお願いいたします。

  • DOSコマンドの環境変数取得について

    DOSコマンドで/区切りの文字列の取得方法が分からなく教えて頂きたいです。 (例) DOSコマンドでdddだけ取得して表示したいです。 set test=aaa/bbb/ccc/ddd UNIXshellだと test=aaa/bbb/ccc/ddd file=`basename $1` echo $file ddd setコマンドの置換""ではなく、/区切り位置での取得方法で 何か方法がありますでしょうか? ご説明内容が分かりにくくて申し訳ございませんが、 よろしくお願い致します。

  • XSLTでtest.xmlファイルのccc要素の値を取得する場合は以下

    XSLTでtest.xmlファイルのccc要素の値を取得する場合は以下(1)、(2)のようにやればいいのですが、(2)の箇所のパス(testを)動的(可変)にすることはできるのでしょうか? (1)document関数によりxmlファイルを変数に格納  <xsl:variable name="aaa" select="document('test.xml')"/> (2)上記変数からパスを指定して値を取得  <xsl:variable name="bbb" select="$aaa/test/ccc"/> test.xml <test> <ccc>bbb</ccc> </test> 例)以下は間違ってると思いますがパスに変数を使用して値を取得することは可能でしょうか?   <xsl:variable name="ccc" select="'test'"/> // 変数cccにtestという文字列を格納   <xsl:variable name="bbb" select="$aaa/$ccc/ccc"/> //test/cccがパスのつもり

    • 締切済み
    • XML
  • 次の要素の値取得

    XSLで、要素の値の取得方法がわかりません。 ご教授いただければうれしいです。 XML----------------------------------- <data> <num1>test</num1> <title>title</title> </data> <data> <num2>test2</num2> <title>title</title> </data> で、XSL内で、 <xsl:template match="num1"> // ここで、num2があるか判断したい </xsl:template> ということは、出来るのでしょうか?

    • ベストアンサー
    • XML
  • TCPDFでのHTML出力

    TCPDFを利用してPDFファイルを生成しようとしています。 現在ある動的なHTMLをPDFファイルにしようとしていますが、うまくいきません。 手順は 1.DBからデータを取得する。 2.取得したデータをテンプレートに埋め込む。(file_get_contents関数でテンプレートファイルを読み込んで、標識をつけた変数部分を置換する。) 3.データの埋め込まれたテンプレートファイルをfile_get_contents関数で読み込んでwriteHTMLの第一引数に渡す。 ところが3のfile_get_contentsのところでなぜかwarningが出てしまいます。 なぜかわかりません。 漠然としていますが、教えていただけるでしょうか?

    • ベストアンサー
    • PHP
  • perl cgiでサブディレクト内のファイル名取得

    perl cgiでサブディレクト内のファイル名取得 例 $dir="../01/"; $id_c="*.c"; $file_c=$dir.$id_c; @InputFileAllBuf_c = glob($file_c); $InputFile = $fileAll; open IN,"$InputFile"; @InputAll = <IN> ; close(IN) ; のようにすると、指定dir内のファイル名が 取得できます。 さらに、指定dirの直下たけでなく、 指定dir内のサブディレクトも、 ファイル名を取得する方法ありますか? よろしくお願いします。

  • SQLでデータを整形して取得可能でしょうか?

    ■testテーブル |pk|file_name +--+-------------+ 1 |55_ファイル名 2 |56_ファイル名 のうようにMySQLのカラムにデータが入っているのですが、file_nameを 最初の数字とアンダーバーをカットした、ファイル名の文字列を SQLで取得したいのですが、何らかの書き方で実現できるでしょうか? REGEXPという関数があることまではわかりましたが、 私の頭では難しくてわかりませんでした・・よろしくお願いします。

  • カレントブックのファイル名の取得

    早速ですが。 カレントブック(例:test.xls)の名前をどうやって取得できますか。 マクロ(code)にカレントブック名を固定値(test.xls)で指定していますが、 下記のように、改善したいと思いますが、 ================================= test.xlsのマクロに PCvsFileName="test.xls" Windows("PCvsFileName").Activate ================================= 該当xlsファイル名は常に変わるから、カレントブックのファイル名の取得方法が 知りたいです。 よろしくお願いします。

  • 改行コードだけの行が現れるまでを1行として取得

    PHPでインプットファイルから、 改行コードだけの行が現れるまでを1行として取得しようと思っています。 下記例のように、 fgetsで行を取得しようとしたら、 改行が現れた時点までを1行としてしまうので、 少し違った1行の取得となってしまいました。 どうすればPHPで実現できるのか教えて欲しいです。 【例】 this is a pen. good-bye. ↓ this is a pen.good-bye. を1行分として取得したい。 # PHP 5.3.9 # CentOS 5.8 ---- $inputpath = '/home/test/test.txt'; $file = fopen($inputpath,"r") or die("open error $inputpath"); flock($file,LOCK_SH); while (!feof($file)){ $string = fgets($file,10000); print "$string"; print "\n"; } //relese the lock flock($file, LOCK_UN); //close the file fclose($file); ----

    • ベストアンサー
    • PHP
  • php テンプレート

    すみません。phpで質問です。 テンプレートを用意しようと思いとりあえずサンプルを探して動かしてみたのですがうまくテンプレートのように動きません。 ちゃんとした動かし方をお教えてください。 (tempファイルの拡張子はphpがいいです。) temp.html <h2>この記事は、_+test+_です。</h2> func.php <?php function func_temp($html_file, $disp_data) { // テンプレート表示用の関数 $html_data = file_get_contents($html_file); // テンプレートファイルを読み込み $replaced = '/_+(.*)+_/'; // 検索するパターンの指定 $html_data = preg_replace($replaced, $disp_data, $html_data); // 置換実行 return $html_data; // 表示用のHTMLデータを返す } ?> access.php <?php require 'func.php'; // テンプレート機能ファイルを読み込む $data = 'PHPのテンプレートって何で作る?'; // 画面に表示させるデータを登録 echo func_temp('temp.html', $data); // テンプレート機能関数を呼ぶ ?> 参考: https://www.sejuku.net/blog/73463

    • ベストアンサー
    • PHP

専門家に質問してみよう