• ベストアンサー

複数回のパターンマッチ

どうしても複数回のパターンマッチで値が取得できません。 すべてを配列などに代入したのですがどうすればよいのでしょうか? 下記のような感じです。 $str = <<EOF <a>dasfdaf</a><br> asfdafdsa sfatyuytu <a>jkytr</a><br> gjetjt tyurtyu EOF ; if ($str =~ /<a>(.*)<\/a><br>/g) { @list = $1; } よろしくお願い致します。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

次のような方法で、1度に処理することができます。 @list = ($str = <<EOF) =~ /<a>(.*)<\/a><br>/g;   # ; は EOF の次の行でも可 ・・・ EOF または、 @list = ($str = <<EOF) ・・・ EOF =~ /<a>(.*)<\/a><br>/g;

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

@list = ($str =~ /<a>(.*)<\/a><br>/g); もしくは while ($str =~ /<a>(.*)<\/a><br>/g) { push (@list, $1); }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javascriptの複数マッチで質問です。

    javascriptを使って入力された文章を配列に格納し、条件にあったものを全て表示するものを作成したいのですが、複数マッチの部分がよくわからなく困っています。 下記のプログラムは配列に格納したところまでなんですが複数マッチのところで躓いてしまいました。for文の部分に複数マッチに相当するものを入れれば動くと思ったのですがうまくいかないのが現状です。 どなたか知恵をお貸しください。 よろしくお願い致します。 例 指定文字:/ 今日は1/2です。明日は1/3です。 1/5まで頑張りましょう。 出力:1/2 1/3 1/5 こういう形にしたいです。 ////////////////////////////////////////// <html> <head> <script language="JavaScript"> function tester() { var str = document.getElementById('input_text').value; arr = str.split(/\r\n|\r|\n/); for (i = 0; i < arr.length; i++) { //この部分がよくわからないです。 } } </script> </head> <body> <textarea id=input_text rows="10" cols="45"> </textarea><br> <input type=button onclick="tester()" value="start"> </body> </html>

  • 正規表現でのマッチを複数取得したい

    正規表現にて、文字列のhtmlタグ部のみを配列にして取得したいのですが、初めにマッチする1つしか返り値を取得できません。 ----ソース--------------------- $this->target_str <<<EOS <test1>aaa</test1> <test2>bbb</test2> EOS; preg_match ( "/<.*?>/imsu" , $this->target_str, $RES_ARR ); ------------------------------- 上の例だと、 $RES_ARR[0] => "<test1>" となり、残りのタグは取得できないのです。 google検索にて発見した、'マッチした後も続けて検索する'というオプション'g'をつけてみたのですが、'g'に対してエラーが出てしまいます。 どなたか解決策をお持ちの方いらっしゃいましたらよろしくお願いします!

    • ベストアンサー
    • PHP
  • @b = grep(/マッチパターン/, @a);でなく@a = grep(/マッチパターン/, @a);でOKについて

    @b = grep(/マッチパターン/,@a);だと配列@aの中でマッチするものを探して@bに入れる・・・というのは理解できるんですが、 @a = grep(/マッチパターン/,@a);とし、 foreach $_ (@a) { print $_; } で参照した場合、@aの中のマッチパターンにマッチするのだけ表示されますけれども、ここでマッチしないのは削除されるのでしょうか・・。 @aから@aにいれる・・・となる事について、どのように@aにマッチしたものを入れ、マッチしないものは削除されるのかの仕組みについて、ご説明できる方はいらっしゃいますでしょうか(例えば内部的にpopやshiftが機能していて・・・みたいな事なのかな・・とか思うんですけれども) お手数ですが、ご存知の先生方ご教授願えましたら幸いです。

    • ベストアンサー
    • Perl
  • すべてにパターンマッチしてしまうのはなぜ?

    以下のようなスクリプトを書いた時に my @list = ('ab', 'cd', 'efg', 'hijk'); foreach my $line (@list){ #print "$line\n"; if ($line =~ m/ ^a| ^e| /x){ print "$line "; }} 標準出力は ab cd efg hijk となり、@list内の要素すべてにマッチしたことになってしまいます。 理由がわからずごちゃごちゃといじっていると、検索部分を =~ m// としても全く同じことになります。 これは、どの配列の要素も空(くう?)を含むためにヒットしてしまう・・・ ということなのでしょうか? どのように理解すれば良いのでしょうか?基本的な質問で申し訳ございませんが、どなたかよろしくお願い致します。

    • ベストアンサー
    • Perl
  • Javaで同一のファイルを読み込みながら集計できますでしょうか?

    お世話になります。よろしくお願いいたします。 (JDK:jdk1.6.0_07 環境:Solaris) 読み込むファイル内のデータ量が多いため、 また、ソートもされていないため、 ファイルを読み込みながら、 1行目と全行比較し、集計をListに保管 2行目と全行比較し、集計をListに保管 ・・・・ といったようなことをしたいのですが、可能でしょうか? 下記のようなイメージなのですが //1行目取得 count=0; while (br.ready()) { line = br.readLine(); String str1 = 値1;     //全件取得     while (br2.ready()) {  String str2 = 値1;      //比較し、集計 if(str1 = str2){ count++;       list.add(str1); }     } } 100件でも、100*100回 Loopするので大量データを扱うのに あまり現実的ではないかもしれませんが・・・。

    • ベストアンサー
    • Java
  • (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させ

    (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させたい。 たとえば、条件1=A列で値が数値であるセルと、条件2=条件1でマッチしたセルと同じ行でC列で値が「その他」という文字列であるセルを検索させます。 そして、A列でマッチしたセルの値をE列に出力させて、C列でマッチしたセルの値をF列に出力させたい、というような感じです。 VLOOKUP関数などで、{配列}を使うなどすれば可能だと思って試行錯誤したけどダメでした。 なお、データベース関数のように条件セルなど作業セルが必要な方法は使いたくないです。 よろしく、お願いします。

  • サイト内検索で複数の言葉にマッチさせるには

    簡素な検索エンジンを作りたいんですが 複数の言葉にマッチする仕組みが作れなくて困っています たとえば 検索したい文が$str 複数のキーワードが$key=array("AAA","BBB",....)だったとして for($j=0;$j<count($key);$j++){ if(mb_ereg_match("$key[$j]",$str)){print "HIT";} } だと只のor検索、$keyの中身を(AAA|BBB|...)の形に変えてpreg_matchさせても当然or検索 なにか複数の単語にマッチさせる方法はありませんでしょうか?

    • 締切済み
    • PHP
  • Listのマッチを判定する便利Util

    Javaで以下のような処理をスマートに実現する良い方法を教えて下さい。 ・Listに配列をaddして、そのListの配列に対して指定した値がいくつマッチするかを判定する。 具体例として、 1、配列を作成 String[] array1 = { "aaa", "bbb", "ccc" }; String[] array2 = { "bbb", "ccc", "ddd" }; String[] array3 = { "ccc", "ccc", "ddd" }; String[] array4 = { "fff", "ggg", "hhh" }; 2、Listに配列を格納 List list = new ArrayList(); list.add(array1); list.add(array2); list.add(array3); list.add(array4); 3、Listの要素から"ccc"と"ddd"が2つマッチする要素を取得 上記の場合は"ccc"と"ddd"が2つマッチするのはarray2だけなのでarray2を取得する。 ※array3も"ccc"と"ddd"が2つありますが、"ccc"が2つあるので計3つマッチと判定して取得しない。 質問は上記3、の箇所です。 できればfor文でループさせて突合せ処理みたいなことは避けてスマートに実現する方法を探しております。 どなたか良い方法をご存知でしたらご教示下さい、お願い致します。

    • ベストアンサー
    • Java
  • パターンマッチ

    The remained line is shown below. Outline Lab's file A and B ファイルの中身は上記のようになっています。 サブルーチンを作り、パターンマッチで1行目以外を新しいarrayに入れようとしています。 以下のように書きましたが、空白行を選択してしまいます。どうしたら目的のように動くようになりますか? 宜しくお願い致します。 use strict; my @new_line = skip(@input) sub skip { my @lines = @_; my @skip = ("Outline", "Lab\'s\sfile", "A\sand\sB"); foreach my $line(@lines) { my $word = join ("|", @skip); if ($word =~ /^\$line$/) { push @new_line, $line; } } return @nnew_line; }

    • ベストアンサー
    • Perl
  • コンテキストについて

    パターンマッチを用いて、変数$numに、文字列$strが正の整数の場合はその値を代入し、そうでない場合はデフォルト値として定数を代入したいのですが、 ($num) = ($str =~ /^([1-9][0-9]*)$/) || 1; としても、正の整数としてマッチした場合でも、||の影響で||の左辺がスカラーコンテキストとして評価され、真値としての1が代入されて上手くいきません。 上記の用件を1行で満たすPerlらしいスクリプトがあったら是非教えてください。 宜しくお願いします。

    • ベストアンサー
    • Perl