ショボ短歌会

c#で正規表現を使用してのmatchがうまくいきません。

例えば以下のようなタグがあったとします
この6行をmatchの対象の文字列としたとします。(タグは適当です)

----------------------------------------
<select class="iiy_name_list">
<option value="1347">abc</option>
</select></td>
<select class="sug_name_list">
<option value="761">def</option>
</select></td>
----------------------------------------

2行目の"abc"を含む列が欲しかったので、以下のように正規表現にてキャプチャ範囲を指定
@"<option\s+value=""1347"">(.*)</select></td>",

しかし、”(.*)”以降に指定した"</select></td>"というタグは
match対象の全体分には2箇所全く同じ物があるため、2回目に出現した"</select></td>"まで読み込み、不必要なdefの行までも取得してしまいます。

"</select></td>"以外に正規表現で指定できる文字はありません、
”(.*)”以降に指定した"</select></td>"が最初に出現した場所までをキャプチャし、2回目に出現してもキャプチャの範囲対象外にするには
どのようにすればよいのでしょうか?

よろしくお願いします。

A 回答 (2件)

.*を.*?にしてみてはどうでしょう。


.*は最長一致,.*?は最短一致になるはずです。
MSDN: 量指定子
http://msdn.microsoft.com/ja-jp/library/3206d374 …
    • good
    • 0
この回答へのお礼

ドンピシャな回答ありがとうございます。
見事解決しました。

お礼日時:2010/06/05 11:37

回答にならないかもしれませんが、XML関連するクラスで検索したほうがよさそうじゃないですか?

    • good
    • 0

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