こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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""

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

よろしくお願いします。

投稿日時 - 2011-01-09 15:21:44

QNo.6435833

困ってます

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

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

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

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

投稿日時 - 2011-01-10 19:48:11

お礼

回答ありがとうございます!

目的通りに処理ができました。
""で囲まれているものと囲まれていないものという分け方はとても思いつきませんでした。
とても勉強になりました。


ありがとうございます。

投稿日時 - 2011-01-12 08:00:36

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

""で囲まれた範囲にある = を "=" にでも置換。
さっきのコードを実行。
置換した部分を元に戻す。

ってなのはどうでしょう。
普段正規表現使わないのでスマートな方法が思いつきませんでした。
ただの置換操作なので予期しないバグがでてくるかも(既存のコードに"="が入ってる場合とか。無いとは思うけど…)
字句解析のほうが正規表現よりは安定そうですね。

投稿日時 - 2011-01-10 19:27:58

ANo.2

>事例として数式を書いたのですが、実は文字列に対応できればと思っています。

数字でも文字でも空白でなければ関係ないです。

alt="aaa bbb=zzz"

のように、属性内に空白と= の両方が含まれているケースがあると言うこと???


>たとえば、パラメータのデータなどで""内に=が使われていたりします。

ていうか、それが元の質問の趣旨ですよね?

投稿日時 - 2011-01-10 08:45:57

お礼

はい、ご指摘の通りです。

まさに例に出していただいたような場合にうまくいきません。
私の例として出したのが相応しくありませんでした。

よろしくお願いします。

投稿日時 - 2011-01-10 16:47:02

ANo.1

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

でどうでしょう?

投稿日時 - 2011-01-09 18:02:06

お礼

回答ありがとうございます。

事例として数式を書いたのですが、実は文字列に対応できればと思っています。
たとえば、パラメータのデータなどで""内に=が使われていたりします。

よろしくお願いします。

投稿日時 - 2011-01-10 01:33:46

あなたにオススメの質問