あなたの映画力を試せる!POPLETA映画検定(無料) >>

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

正規表現のエンジンはBREGEXP.DLLです。
http://www.hi-ho.ne.jp/babaq/bregexp.html

このQ&Aに関連する最新のQ&A

A 回答 (2件)

([^\"])



(\\\"|[^\"])
としたらでどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/06 11:15

まず、正規表現の\と、それをC言語などの文字列として" "の中に書く場合の" "中での\が混同されているような気がします。



ダブルクォーテーションで囲まれた部分の正規表現は、
"([^"]*)"
で、これを " " 内に書くときに、「"」が「\"」になり、
\"([^\"]*)\"
になります。お書きのものは*と)が逆ですがタイプミスでしょう。

で、問題の、「\"」も「" "」内に書けることにした場合の正規表現は、
"(((\\")|[^"])*)"
これを、Cの " " 内に書くときは、「"」が「\"」に、「\」が「\\」になるので、
\"(((\\\\\")|[^\"])*)\"
になります。

BREGEXP.DLLは使ったことが無いので、一般に使われる(拡張)正規表現での話です。
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/03/06 11:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

質問させてください。

abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" asdakjsd

のような文字列があります。
これの、"(ダブルクォーテーション)で囲まれている文字列を取得したいのですが、正規表現がうまくいきません。
取得結果としてはは、xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh の部分がほしいです。

preg_match('/"([.*])"/', $str, $matches);とやったり
preg_match('/\"([.*])\"/', $str, $matches);とやったり
preg_match('/\"([.*?])\"/', $str, $matches);とやったりしたのですが、
どうしても$matchesにほしい結果は入っていません。

どのような正規表現で取得可能でしょうか?

何卒ご教授ください。

Aベストアンサー

preg_match('/"(.*?)"/', $str, $matches);
でよいのでは?

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

正規表現によるマッチング(?)を勉強しています。

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

Aベストアンサー

もとい

”abc"abc”は”abc\"abc”と記述します

Q正規表現 ""で囲まれた内部は処理しない方法

正規表現でタグ内の項目内容に""をつける処理を考えています。

現在は、= の右側にある内容を""で囲む処理をしています。

C#で書いたコードは次ような感じです。
text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline);

このときに次のようなHTMLコードがあった場合、

 <div id=000 class="tayp1,type2">
 <div id="111" class=type1>
 <img src="200.gif" alt="100+100=200">

すると次のような結果になります。

 <div id="000" class="tayp1,type2">
 <div id="111" class="type1">
 <img src="200.gif" alt="100+100="200"">

3行目はalt内にも=があるため間違った処理をしてしまいます。
誤:alt="100+100="200""

このような""内部は処理しないようにするにはどうすればよろしいでしょうか?
""内部の=にはヒットしななれば…と思っているのですが。

よろしくお願いします。

正規表現でタグ内の項目内容に""をつける処理を考えています。

現在は、= の右側にある内容を""で囲む処理をしています。

C#で書いたコードは次ような感じです。
text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline);

このときに次のようなHTMLコードがあった場合、

 <div id=000 class="tayp1,type2">
 <div id="111" class=type1>
 <img src="200.gif" alt="100+100=200">

すると次のような結果になります。

 <div id="000" class="tayp1,type2">
 <div id="111...続きを読む

Aベストアンサー

#1,#2です。お書きの部分が、[^\"' >]+ となっていたので、空白は除外かと思っていました。
最初から"で囲まれていた場合は、先にマッチさせて元と同じ物に置換すれば良いですね。

text = Regex.Replace(text, "(\\s\\w+)=\"([^\"]*)\"|(\\s\\w+)=([^\"' >]+)","$1$3=\"$2$4\"" ,RegexOptions.Singleline);

かな。
' で囲まれた物も対象にしたければ同じ調子で。

Qダブルクォーテーションのreplaceの方法

JavaScriptで文字を置換する際に
AAA = new String(AAA).replace(/ZZZ/g, "QQQ");
にしますよね、これで文字列中のダブルクォーテーション「"」を
任意の文字に変換したいのですが、何か良い方法はないでしょか?

よろしくお願いします。

Aベストアンサー

AAA.replace(/\"/g,"Q");
このように「"」の前に\をつけるといいですよ。

Q正規表現でシングルクォーテーション内の文字列を取る

正規表現でどうしても分からない状態です。よろしくお願いします。

PHP5.2で、

'You\'re pen'

というシングルクォーテーションで囲まれた文字列を
正規表現で取得しようとしています。

preg_match_all("/\'([^\']*|\\\')*?\'/", $src, $matches);

のようにしていますが、どうしても

'You\'

までしか取れません。
どうしたら取れるでしょうか。。m(_ _)m

Aベストアンサー

preg_match_all("/'([^'\\\\]|\\\\\\\\|\\\\')*?'/",$src,$matches);

まず、 " " で囲んだ文字列の中の ' はエスケープ不要です。
正規表現で、\ 自身を表すためには \\ とする必要がありますが、\\ を引用符で囲まれた文字列で表すためには、\\\\ と書きます。
同じように"で囲んだ正規表現で \\ という文字列を表すのは \\\\\\\\ となります。

上記は ' で以下のものを囲んだ文字列にマッチします。
(1) ' でも \ でも無い文字
(2) \\ で \ 自身を表す
(3) \' で ' を表す

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

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

VB.NET で開発を行っています。
シングルクォーテーションで囲まれた文字列の検索を行いたいのですが正規表現の記述が良くわからないので困っています。

たとえば
'AAA' + 'BBB' + 'CCC'
上記のの文字列から「'AAA'」「'BBB'」「'CCC'」も検索したいのですが,パターンとして「'.*'」を用いると「'AAA' + 'BBB' + 'CCC'」が返ってきます。

どなたかご教授ください。よろしくお願いします。

Aベストアンサー

こういうのでよいの?

Module Mogera

Sub Main

Dim strText as String
strText = "'AAA'+'BBB'+'CCC'"

Dim ms as MatchCollection
'ms = Regex.Matches(strText, "'.*?'")
ms = Regex.Matches(strText, "'[^']*'")
'↑どちらでもお好きな方をどうぞ

Dim m as Match

for each m in ms
Dim s As String
s = m.Groups(0).value
Console.WriteLine(s)
next
End Sub
End Module

実行結果:
'AAA'
'BBB'
'CCC'

「最左最長」というキーワードで正規表現について
調べてみてください。

Q文字列の ' aaa"bbbccc"ddd' から"で囲まれた部分を抜き出したい

こんにちは。
タイトルの通りなのですが

$test = 'aaa="bbbccc"ddd';
のbbbcccだけを抜き出したいので、

if ($test =~ /aaa=\"(.+)\"/) {
$test= $1;
}


と正規表現を利用して実行してみましたがうまく動作しません。

確定してるのは aaa="この間の文字列"の形で、
aaa=ダブルコーテーション ダブルコーテーション
は固定なのです。

そのようにな文字列から特定の個所を抜き出すように実装するには
どのようにすればよろしいのでしょうか?

どなたかご存知の方、よろしくご教授ください。

Aベストアンサー

 細かい点ですが
>正規表現を利用して実行してみましたがうまく動作しません。
 と有りますが、実際にでた結果を書いていただけると
回答がしやすいです。
 実際は貴方が書かれているやり方でもとれていると
思うのですが…。

 基本的に私が普段、使うときには
if ($test =~ /\"(.*?)\"/) {
$test= $1;
}
を使用しております。

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング