• ベストアンサー

正規表現で囲まれた部分の文字列

正規表現でダブルコーテーションで囲まれた部分の文字列 を検索したいのです。 \"([^\"])*\" とりあえずこんな感じで検索はできるのですが 問題はダブルコーテーションで囲まれた部分の エスケープ文字\の判定が上手くできません。 ([^\"]) この部分でダブルコーテーション以外の文字列、 ただし\"は除くって感じにしたいのですがどうすれば良いでしょうか。 宜しくお願いします。 正規表現のエンジンはBREGEXP.DLLです。 http://www.hi-ho.ne.jp/babaq/bregexp.html

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

  • ベストアンサー
  • bender
  • ベストアンサー率45% (108/236)
回答No.1

([^\"]) を (\\\"|[^\"]) としたらでどうでしょうか。

sha-girl
質問者

お礼

なるほど。大変参考になりました。 有難うございました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

まず、正規表現の\と、それをC言語などの文字列として" "の中に書く場合の" "中での\が混同されているような気がします。 ダブルクォーテーションで囲まれた部分の正規表現は、 "([^"]*)" で、これを " " 内に書くときに、「"」が「\"」になり、 \"([^\"]*)\" になります。お書きのものは*と)が逆ですがタイプミスでしょう。 で、問題の、「\"」も「" "」内に書けることにした場合の正規表現は、 "(((\\")|[^"])*)" これを、Cの " " 内に書くときは、「"」が「\"」に、「\」が「\\」になるので、 \"(((\\\\\")|[^\"])*)\" になります。 BREGEXP.DLLは使ったことが無いので、一般に使われる(拡張)正規表現での話です。

sha-girl
質問者

お礼

詳しい説明有難うございます。勉強になりました。

関連するQ&A

  • またまた正規表現><

    いつもお世話になっておりますっ>< 正規表現の記述方法で質問があります。 (納期に追われております><) たとえば <font color=#FFFFFF size=6> みたいな文字があってこれを <font color="#FFFFFF" size="6"> に変えたいんです。つまり「=」の後ろに ダブルクォーテーションがなかったら ダブルクォーテーションを付けたいんです>< さらに <font color="#FFFFFF" size=5> とか、ちゃんとダブルクォーテーションが着いてる文字列も混在しております>< 最終的には = のあとにダブルクォーテーション で その後に続く文字を 囲いたいんです>< 正規表現については以前質問したんですが、 申し訳ありません、また教えてください、よろしくお願い致します><

  • CSVデータを正規表現で抜き出せません・・・。

    お疲れ様です。初投稿になります。 どうぞ宜しくお願い致します。 CVSデータ(囲い文字:"(ダブルコーテーション))を正規表現でマッチングさせ、抜き出そうと考えています。 エスケープ文字を以下のように設定しています。 ・""(ダブルコーテーション * 2) ⇒ "(ダブルコーテーション) ・\"(円記号 + ダブルコーテーション) ⇒ "(ダブルコーテーション) ・\\(円記号 * 2) ⇒ \(円記号) 例えば・・・ "A",""",BB,"",\",CC,\\,DD""","EEEE","", ですと、「"A"」「""",BB,"",\",CC,\\,DD"""」「"EEEE"」「""」と取れる想定になります。 特に2番目の「""",BB,"",\",CC,\\,DD"""」は、 「"""(←escape),BB,""(←escape),\"(←escape),CC,\\(←escape),DD""(←escape)"」 という想定です。 PHP関数ではエスケープ文字の問題により取得しきれず、自力での取得を行っております。 私が考えた正規表現は「"[^"]*((""|\\")[^"]*)*[^\\]",|"",」となりますが、カンマが入り乱れる上記パターンを満たすことができません。 これは、正規表現での解決は不可能でしょうか? 何日も解決できず、困っています・・・。 是非、皆様のお力添えのほど、宜しくお願い致します。 PS. このサイトで動作確認を行っておりました。 参考になれば幸いです。 http://www.rider-n.sakura.ne.jp/regexp/regexp.php

    • ベストアンサー
    • PHP
  • ''で囲まれていない文字列にマッチする正規表現

    下記のような文字列($str)に対して置換を行い、 my $str = qq{ AAA = BBB - 'CCC' }; $str =~ s/★正規表現★/sprintf("DDD(%s)",$1)/xmsge ; 変換後 $str = DDD(AAA) = DDD(BBB) - 'CCC' ; を実現する★正規表現★を書きたいと思っています。  ・AAA,BBB,CCCは[\w]で構成される文字列です。 ですが、シングルクォーテーション('')で囲まれていない文字列にマッチする正規表現が書けなく困っています。 一度、シングルクォーテーションで囲まれているものも含めて全てDDD()をつけて、そのあとで、シングルクォーテーションを含むものは元に戻すことでやりたいことは実現できているのですが、1行で実現できる方法を探しています。 アドバイスよろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現:囲われた文字列の置換

    シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。  全角文字のみ  半角文字のみ  全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。

  • 正規表現でシングルクォーテーションで囲まれた文字列

    VB.NET で開発を行っています。 シングルクォーテーションで囲まれた文字列の検索を行いたいのですが正規表現の記述が良くわからないので困っています。 たとえば 'AAA' + 'BBB' + 'CCC' 上記のの文字列から「'AAA'」「'BBB'」「'CCC'」も検索したいのですが,パターンとして「'.*'」を用いると「'AAA' + 'BBB' + 'CCC'」が返ってきます。 どなたかご教授ください。よろしくお願いします。

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

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

    • ベストアンサー
    • PHP
  • 正規表現

    正規表現を使って、数字、大文字小文字のアルファベット、「”」(ダブルコーテーション)、「、」コンマ以外の記号を、表せる正規表現方法はどうなるのでしょうか? 見当がつきません。 どなたかお願いします。

    • ベストアンサー
    • Java
  • 正規表現でシングルクォーテーション内の文字列を取る

    正規表現でどうしても分からない状態です。よろしくお願いします。 PHP5.2で、 'You\'re pen' というシングルクォーテーションで囲まれた文字列を 正規表現で取得しようとしています。 preg_match_all("/\'([^\']*|\\\')*?\'/", $src, $matches); のようにしていますが、どうしても 'You\' までしか取れません。 どうしたら取れるでしょうか。。m(_ _)m

  • ダブルクォーテーションを含む正規表現について。

    正規表現によるマッチング(?)を勉強しています。 例えば「blog」という文字列で、マッチングを試みる場合は、 String str = "blog"; で、strに格納すると思うのですが、例えば「link rel=""」という文字列でマッチングを試みる場合はどうすればいいのでしょうか? 「""」の部分をそのまま文字列のダブルクォーテーションの中に入れると、エラーになってしまうので、何か別のやり方が必要だと思うのですが、わかりません…。

    • ベストアンサー
    • Java
  • 正規表現でエスケープ文字の置換

    正規表現でエスケープ文字(&nbsp;等)を別の文字列に置換しようと思い、「/&.+;/」というパターンを作成したのですが、エスケープ文字が連続する場合(&nbsp;&lt;)1文字に置換されてしまいます。 正規表現をご存知の方、ご教授ください。

専門家に質問してみよう