PHPで指定範囲の文字列取得方法

このQ&Aのポイント
  • PHPで指定した範囲の文字列を取得する方法について調べています。具体的には、指定した文字列内の[]内の文字列を配列に格納する方法についてです。正規表現を使用して取得する方法を試していますが、うまくいかないようです。
  • 示されたコードでは、指定した文字列内の[]内の文字列を取得するために正規表現を使用していますが、うまくいかないようです。正しい正規表現パターンを見つけることができないため、問題が発生しているようです。
  • PHPで指定した範囲の文字列を取得するために、正規表現を使用していますが、うまくいかないようです。指定した文字列内の[]内の文字列を取得するための正しい正規表現パターンを見つける方法についてアドバイスを求めています。
回答を見る
  • ベストアンサー

PHPにて指定した範囲の文字列取得について

指定した文字列内の[]内の文字列を配列に格納したいのですが、 たぶん正規表現の書き方が悪いため、取得がうまくいきません。 ご教授頂けないでしょうか。 $tag = "その他&nbsp;([FA1 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1])[FA2 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1]<[FA3 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1]>"; preg_match_all('/\[FA[\w\W]*\]/s',$tag,$tagArray,PREG_SET_ORDER); 取得イメージは以下の通りです。 $tagArray[0] = "[FA1 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1]" $tagArray[1] = "[FA2 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1]" $tagArray[2] = "[FA3 type=s size=40 selection=4:commentテスト;1:選択肢1:q1=1:RD=1:RD=1;2:選択肢2::RD=1:RD=1;3::選択肢3:RD=2:RD=1;4:選択肢4::RD=2:RD=1]"

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

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

単に U オプションが足りないだけでは? http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php それでも提示されたように$tagArrayに入れたいとなると多少は工夫することになりますかね。 preg_match_all('/\[FA[\w\W]*\]/sU', $tag, $tmp, PREG_SET_ORDER); foreach ($tmp as $val) { $tagArray[] = $val[0]; }

bugz1977
質問者

お礼

Uオプションをつけると分解することができました。 ありがとうございます。

関連するQ&A

  • GoogleChromeで選択文字列を取得する方法を教えて下さい。

    GoogleChromeで選択文字列を取得する方法を教えて下さい。 GoogleChromeでページ内で選択した文字列を取得し、表示させるプログラムを作成しています。 いろいろ検索してみたところ、window.getSelection()+''; のようにすれば取得できるようなことが書いて あったんですが、うまくいきませんでした。 function test() { var selection = window.getSelection()+''; return selection; } もちろん window.getSelection() でも駄目でした。 わかる方いらっしゃいましたら、教えて頂けると嬉しいです。

  • 基礎で恐縮です。PHPで文字列を抽出

    PHP Version 5.2.14 です。 $foo = '/HUB.php/★'; という文字列があり、ここから、★の部分だけを取り出し、$bar に代入するにはどうすればいいのでしょうか? 例) $foo = '/HUB/a=dfnjgdbnnfjbkndzjnkbldjteznjhkbtkdkgld/g?h=1?g=2&q=5'; ならば、 $bar = 'a=dfnjgdbnnfjbkndzjnkbldjteznjhkbtkdkgld/g?h=1?g=2&q=5'; を取得したいです。 (★の中に「HUB」という文字列が出てくる可能性もあります) preg_match か preg_replaceを使えばよさそうだということはわかるのですがうまくいかず。。。 補足 すみません、上の例で、 $bar = 'a=dfnjgdbnnfjbkndzjnkbldjteznjhkbtkdkgld/g?h=1?g=2&q=5'; を取得したあと、 一番最初にでてくる「?」より左の文字列を、$hogeに、 一番最初にでてくる「?」より右の文字列を、$fugaに、 代入する方法もお教えいただけますでしょうか? 希望) $hoge = 'a=dfnjgdbnnfjbkndzjnkbldjteznjhkbtkdkgld/g'; $fuga = 'h=1?g=2&q=5'; よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 、"(ダブルクォーテーション)で囲まれている文字列を正規表現で取得

    質問させてください。 abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" asdakjsd のような文字列があります。 これの、"(ダブルクォーテーション)で囲まれている文字列を取得したいのですが、正規表現がうまくいきません。 取得結果としてはは、xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh の部分がほしいです。 preg_match('/"([.*])"/', $str, $matches);とやったり preg_match('/\"([.*])\"/', $str, $matches);とやったり preg_match('/\"([.*?])\"/', $str, $matches);とやったりしたのですが、 どうしても$matchesにほしい結果は入っていません。 どのような正規表現で取得可能でしょうか? 何卒ご教授ください。

    • ベストアンサー
    • PHP
  • 文字列の比較と取得

    取得した文字列 $moji には以下のような郵便番号と住所が入っています。 111-2222 北海道 225-3535 東京 333-4545 沖縄 現在は以下の処理です。 if (preg_match(\"/北海道/\", \$moji)) { echo \"<font color=blue >寒い</font>\";} if (preg_match(\"/東京/\" , \$moji)) { echo \"<font color=green>首都</font>\";} if (preg_match(\"/沖縄/\" , \$moji)) { echo \"<font color=red >熱い</font>\";} 受け取った文字列が「東京」の時は上記から緑色の文字で「首都」と表示しています。 これを郵便番号「225-3535」で受け取った時にも同じように表示したいのですが上手くいきません。 未熟者でも解るように教えて頂ければ助かります。よろしくお願いします。

    • 締切済み
    • PHP
  • 文字列を取得し書き出す

    プログラムを書いたファイルから Test っていう文字列が含まれる関数名をすべて取得して DoTest という関数内に書き出すというものをつくりたいんですが どうすればよいかわかりません… どなたかご教授ください。

  • 列の番号ではなく文字列で取得するには

    エクセル2003 Sub test() MsgBox ActiveCell.Column End Sub で現在カーソルのあるセルの列番号「3」が取得させるのですが 「C」と言う風に列の文字列で取得するにはどうすればいいのでしょうか? よろしくお願いします。

  • php で特定の文字の行以降のデータを無視したいです。

    php で特定の文字の行以降のデータを無視したいです。 $text = ' この文字列はテストといいます。 テストはどうですか? <a href="index.html">豆腐</a> というサイトがあります。 '; という、文字列から、 ”この文字列はテストといいます。 テストはどうですか? ” というデータを取得したいと考えています。 例ですと、「<a href="index.html">豆腐</a>」というデータ以前の データを取得したいと思っています。 恐らく、preg_match あたりで、できる…かもと思っていますが…。

    • ベストアンサー
    • PHP
  • phpで文字列に入ったhtmlタグの中身を取得

    phpで次の文字列の中身を自分の思ったように取得したいです。 -----$textの中身 <div class="hoge">ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2</div> -----自分の実行したphpコード preg_match_all("/<div class=\"hoge\">(.*?)<\/div>/s", $text, $textArr); -----結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ -----自分の望む結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2 ---------------------------------- divタグの中にdivタグが入っている時、 最初の/divに反応してしまいます。ちゃんと、ほげほげ2まで取得する方法を教えてください。

    • 締切済み
    • PHP
  • textareaの選択された文字列の取得

    HTMLエディタを作ろうとしています。 textAreaの選択された文字列の開始桁数・終了桁数を取得するにはどのようにすればよいのでしょうか? var selected_text; if (document.getSelection) // Moz { selected_text = document.getSelection(); } else if (document.selection && document.selection.createRange) // IE { rng = document.selection.createRange(); selected_text = rng.text; } alert(selected_text); これで、選択された内容は取得できたのですが、初めと終了の桁数が取れていません。 クロスブラウザに対応したく、IE6以上、FF3、Opera9.5、Safari3.1、Choromeにて動作を確認したいのですが、お分かりになる方いましたら、よろしくお願いします。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。