【お題】引っかけ問題(締め切り10月27日(日)23時)

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

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

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

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

よろしくお願いします。

A 回答 (4件)

#1,#2です。

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

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

かな。
' で囲まれた物も対象にしたければ同じ調子で。
    • good
    • 0
この回答へのお礼

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

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


ありがとうございます。

お礼日時:2011/01/12 08:00

""で囲まれた範囲にある = を "=" にでも置換。


さっきのコードを実行。
置換した部分を元に戻す。

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

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



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

alt="aaa bbb=zzz"

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


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

ていうか、それが元の質問の趣旨ですよね?
    • good
    • 0
この回答へのお礼

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

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

よろしくお願いします。

お礼日時:2011/01/10 16:47

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



でどうでしょう?
    • good
    • 0
この回答へのお礼

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

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

よろしくお願いします。

お礼日時:2011/01/10 01:33

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

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


おすすめ情報