• ベストアンサー

xxxxxxx = "aaa bbb ccc"という文字列の""で囲まれた部分を処理したい

最終的にリストにしたいので、正規表現で""内を取り出した後に split /( | )/のような処理をすればいいのだと思うのですが、まず第一に""内の文字列を取り出せません。 はじめのxxxxxxxは決まった文字列ですので、これを変数にできれば早いんですがそういう処理はできないですよね? フォーマットは決まっているのですが、どうやって""内の文字列を取り出せばいいのでしょうか? @ARGV =~ s/\".*\"$/$1/; こういう処理ではうまくいきませんでした。 Perlを触るのが初めてなので、ネットで調べていますがさっぱりわからなくて途方に暮れています。 よろしくお願いします。

noname#57433
noname#57433
  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, なんで @ARGV に対して =~ するかなぁ? 普通は $ARGV[0] =~ /"(.*)"$/; と $1 にとりだしたりするものですが. まあ, あたまに '$' つけて eval すれば変数になるけど, これは普通じゃないし.

noname#57433
質問者

お礼

すみません。 今までこういうのをやったことがない上に、見よう見まねなのでごめんなさい。 そんな悪い事してたんですね。 これで試してみます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

どうも最終的にやりたいことがよくわからないのだけど、こういうの? use strict; use warnings; my $str = 'xxxxxxx = "aaa bbb ccc"'; #← この文字列から my ($tmp) = $str =~ m/"([^"]+)"/; print "\$tmp = $tmp\n"; my @l = split q{ }, $tmp; #←このリストを得る print join("\n", @l), "\n"; 実行結果: $tmp = aaa bbb ccc aaa bbb ccc > はじめのxxxxxxxは決まった文字列ですので、これを変数にできれば これがよくわからない。

noname#57433
質問者

お礼

ありがとうございます。 こちらも参考にさせてもらいます。 最後のは xxxxxxx = "aaa bbb ccc"'; なので xxxxxxに$をつけたら変数になって = があるから "aaa bbb ccc"'を $xxxxxに入れられないかなと思って。 ちょっとバカな考え過ぎでしたか

関連するQ&A

  • 文字列検索のAND条件を引数にしたい

    Perl初心者です。 指定したファイルの中から指定した文字列の入っている行を取得したいのですが、 open(FL, $ARGV[0]); while (<FL>) { if ($_ =~ /$ARGV[1]/) { print $_; } } close(FL); としたとき、 $ARGV[1]に aaa/bbb/ccc と入れてaaaかつbbbかつcccを含む行としたいのですが、うまく動作しません。 このような場合がGREPとかのコマンドを使ったほうがよいのでしょうか? 別の処理も組み込みたいので、できればperlで書きたいのですが、正規表現の文字列を引数で与えるようなことはできるのでしょうか? よろしく御願いします。

    • ベストアンサー
    • Perl
  • 文字列の中の特定部分とそうでない部分とで処理を分けたい

    文字列中で、<test>~</test>で囲まれた部分と、囲まれてない部分とで処理を分けたいです。 そして、分けて処理したあとに、くっつけたいです。 abcdEFG <test> ABCDEFG </test> hiJKLmn ↓ 例えば、<test>で囲まれた部分は小文字に変換、囲まれていない部分は大文字に変換という処理であれば以下のようにしたいのです。 ABCDEFG <test> abcdefg </test> HIJKLMN 扱う文字列は、UTF-8で複数行です。 自分でとりあえず動作するコードは作成してはみたものの、、、 あまりスマートとはいえないと感じていて、もっといい方法があればご教示お願いしたいです。。。 1.文字列Aの中から、<test>で囲まれた部分をpreg_match_all()で取得し、変数Aに格納。 2.変数Aに処理を加え、変数Bに代入。 3.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。 4.文字列Aを、<test>で囲まれた部分をキーとしてpreg_split()で分解し、変数Aに格納。 5.変数Aに処理を加え、変数Bに代入。 6.preg_replace()で文字列Aの中の、変数A部分を変数Bに置換。   $pre1 = array();   $pre2 = array();   preg_match_all("/<test>((.|\r\n|\n)*?)<\/test>/u", $p_string, $pre1);   for ( $x = 0; $x < count($pre1[0]); $x++ ) {     # $pre1[0]ではなく$pre1[1]としてるのは<test>タグを含めないため     $pre2[$x] = $pre1[1][$x];     # hoge*()は処理     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge4( $pre2[$x] );     # <test>タグを戻して、置換後の文字列完成・・・(1)     $pre2[$x] = '<test>'.$pre2[$x].'</test>';     # 置換パターン・・・(2)     $pre1[0][$x] = "/" . preg_quote($pre1[0][$x], "/") . "/u";   }   # 文字列から、(2)置換パターンを探して、(1)置換後文字列に置き換え   $p_string = preg_replace( $pre1[0], $pre2, $p_string );   $pre1 = array();   $pre2 = array();   $pre1 = preg_split("/<test>(.|\r\n|\n)*?<\/test>/u", $p_string, -1, PREG_SPLIT_NO_EMPTY);   for ( $x = 0; $x < count($pre1); $x++ ) {     $pre2[$x] = $pre1[$x];     # hoge*()は処理     $pre2[$x] = hoge1( $pre2[$x] );     $pre2[$x] = hoge2( $pre2[$x] );     $pre2[$x] = hoge3( $pre2[$x] );     # 置換後の文字列完成・・・(3)     $pre2[$x] = hoge4( $pre2[$x] );     # 置換パターン・・・(4)     $pre1[$x] = "/" . preg_quote($pre1[$x], "/") . "/u";   }   # 文字列から、(4)置換パターンを探して、(3)置換後文字列に置き換え   $p_string = preg_replace( $pre1, $pre2, $p_string );   # 最後に<test>タグを削除する   $p_string = preg_replace( "/<test>((.|\r\n|\n)*?)<\/test>/u", $1, $p_string );

    • ベストアンサー
    • PHP
  • split で " または ' で挟まれた部分を一つとして処理するには?

    perl で 文字列を split で処理する時に、" や ' で挟まれた領域を一つの文字列として処理するにはどうやったらよいのでしょうか? たとえば $aaa = "aaa bbb 'c d e' fff"; @aaa = split(/ /, $aaa); だと、 aaa bbb 'c d e' fff となってしまいますが、 aaa bbb 'c d e' fff となるようにするにはどうするのでしょうか?

    • ベストアンサー
    • Perl
  • 目印の文字列でレコードを区切りたい

    お世話になります、Perl初心者です。 正規表現で探したのですがたどりつけなかったので質問させて下さい。 以下のようなレコード(文字列)があります。 「abcxxxiiiislslslfjdkasabcdasdsdfa;ljkabcdfs」 これを「abc」で区切り以下のように3つに分けたいのです。 abcxxxiiiislslslfjdkas abcdasdsdfa;ljk abcdfs abcから次のabcまでをひとつの文字列にして変数に格納したいのです。 どうすればいいでしょうか?教えて下さい。

    • ベストアンサー
    • Perl
  • 正規表現で文字列を区切りたい

    PHPで、正規表現で文字列を分割する方法がわかりません。 やりたいことは、 1|ねこ|2|こあら|3|りす という文字列を、 1|ねこ 2|こあら 3|りす というように、直前の文字が数字でない|で区切りたいです。 区切るための関数は、mb_splitを考えています。 http://php.benscom.com/manual/ja/function.mb-split.php 調べていて、以下のページに書かれている話が近いのかなと思うのですが、 そこで述べられている正規表現の仕組みがよく分からないでいます。 http://okwave.jp/qa1849763.html ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字列の ' aaa"bbbccc"ddd' から"で囲まれた部分を抜き出したい

    こんにちは。 タイトルの通りなのですが $test = 'aaa="bbbccc"ddd'; のbbbcccだけを抜き出したいので、 if ($test =~ /aaa=\"(.+)\"/) { $test= $1; } と正規表現を利用して実行してみましたがうまく動作しません。 確定してるのは aaa="この間の文字列"の形で、 aaa=ダブルコーテーション ダブルコーテーション は固定なのです。 そのようにな文字列から特定の個所を抜き出すように実装するには どのようにすればよろしいのでしょうか? どなたかご存知の方、よろしくご教授ください。

    • ベストアンサー
    • Perl
  • ある法則に従った文字列を抜き出す方法

    以前、ある法則に従った文字列を抜き出す処理をゴリゴリ頑張って作ったのですが、 正規表現で1発で対象文字列を抜き出す事は出来ないのか?と思いました。 しかし、正規表現をそのパターンの時どう記述すると実現出来るのか分からず断念しました。 例えば 1.あいうえお((abc:えー|びー))かきくけこ 2.あいうえお((abc:えー))かきくけこ 3.あいうえお((abc:えー|びー|しー))かきくけこ 4.あいうえお((abc:えー|びー|しー))かきくけこ((abc:でぃー)) こんなのがあった時、パターンとして「((abc:」から「))」の間の文字列を 取得したいです。 1.の時は「えー|びー」、2.の時は「えー」、3.の時は「えー|びー|しー」、 4.の時は「えー|びー|しー」と「でぃー」を、その正規表現にマッチする文字列だとしたいのです。 「((abc:」、「))」の間の文字列長は可変です。 どなたか上記を実現する正規表現をご教示下さい。 正規表現でマッチさせるからには「((abc:」、「))」という文字列もマッチした文字列として 取得するでしょうが、それは後処理で削る事になるので何の問題もありません。

    • ベストアンサー
    • PHP
  • 文字列にコントロール文字を含むと何ができるの?

    プログラミングPerlを読んでいます。 ページをめくる速度が、すっごい遅いのですが・・・ やっとこさ74ページまできました・・・ 今回の疑問は文字列中にコントロール文字を埋め込むと何ができるの? というものです。 この疑問が浮かんだきっかけは このページでコントロール文字を表す正規表現が紹介されていたからです。 このような正規表現が用意されているということはコントロール文字を使用した文字列マッチを行うことを想定しているのだと思います。 すなわちコントロール文字を含んだ文字列を扱う場面が出てくるのだと思うのです。 このような文字列は、どのような場面で登場するのでしょうか。 また、どのような働きをするのでしょうか。 恐らく文字列を画面やプリンターへ出力するのと同時に、何か別の事柄を一緒に行うのではないかと予想しているのですが・・・ ちょっと気になったので質問しました。 どなたか教えてください。

    • ベストアンサー
    • Perl
  • ある文字列を抜き出す方法

    perlを使ってるわけじゃないのですが perl互換の正規表現ができるソフトで a1.*?x2 という正規表現を抜き出すようにしたいのですが どうすればいいでしょうか? a1.*?x2 という文字列は、文章の中に複数でてきて 文章に規則性などもなく「a1」と「x2」の前後も決まった文字ではありません 「a1」と「x2」の間の文字にも特に規則性はありません 気持ち的には [^(a.*?x)]*? を削除すればいいのかな。って思ってやってみましたが 上手くいきません 置換とか、使わないといけないのかなと思いますが 今さっき解説を読んだばかりであやふやです よろしくお願いします

    • ベストアンサー
    • Perl
  • perlでの入れ子文字列削除

    perlを利用して文字列処理を行う際に、入れ子になった文字列を削除したいのですが、正規表現のうまいやり方が思い浮かびません。 例としましては 今日は雨(雪ではない(この辺の処理に困っている))が降っている。 という文章を 今日は雨が降っている。 と処理できるようにしたいです。 $data =~ s/(.*?)//g; $data =~ s/)//g; というやり方では、3重以上になった時の処理ができません。 できれば何重になっても可能な方法をご教示ください。

    • ベストアンサー
    • Perl