C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 正規表現


(過去ログ 125 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■74409 / inTopicNo.1)  正規表現
  
□投稿者/ くま (4回)-(2014/12/25(Thu) 10:35:30)

分類:[C#] 

2014/12/25(Thu) 14:50:15 編集(投稿者)

お世話になります。
VS2010 ASP.Netで開発しています。


下記のタグからsrcの後ろ
http://www.google.jp」を抜き出したいです。

<td class="test">
<img alt="test" src="http://www.google.jp" />
</td>
引用返信 編集キー/
■74410 / inTopicNo.2)  Re[1]: 正規表現
□投稿者/ Hongliang (262回)-(2014/12/25(Thu) 11:03:54)
どれくらい厳密性が要求されるのかが分からないと、これというのは書けませんね。
td要素の配下限定なのか。
任意のtd要素なのか特定のtd要素なのか、特定ならどうやって特定するのか。
td要素とimg要素の間に何か存在しているのか。
img要素のsrc限定なのか。
alt属性が特定の値のみなのか。
属性の登場順は固定で考えて良いのか。
属性値の引用符は省略を認めるのか。シングルクォーテーションは?
などなど。
他にも色々考えられますので、これらだけ答えられてもじゃあこれだと示せるものではありません。
引用返信 編集キー/
■74411 / inTopicNo.3)  Re[2]: 正規表現
□投稿者/ くま (5回)-(2014/12/25(Thu) 11:13:03)
返事ありがとうございます。
下記の通りです。

・td要素配下限定です
・tdとimgの間には空白があります
・img要素のsrcのみを取得します。
・alt属性は変わります。
・属性の順番は固定です。


No74410 (Hongliang さん) に返信
> どれくらい厳密性が要求されるのかが分からないと、これというのは書けませんね。
> td要素の配下限定なのか。
> 任意のtd要素なのか特定のtd要素なのか、特定ならどうやって特定するのか。
> td要素とimg要素の間に何か存在しているのか。
> img要素のsrc限定なのか。
> alt属性が特定の値のみなのか。
> 属性の登場順は固定で考えて良いのか。
> 属性値の引用符は省略を認めるのか。シングルクォーテーションは?
> などなど。
> 他にも色々考えられますので、これらだけ答えられてもじゃあこれだと示せるものではありません。
引用返信 編集キー/
■74412 / inTopicNo.4)  Re[1]: 正規表現
□投稿者/ WebSurfer (445回)-(2014/12/25(Thu) 11:30:42)
No74409 (くま さん) に返信

> VS2010 ASP.Netで開発しています。

ASP.NET とどう関係するのでしょう?

できれば、局所的な部分の質問だけでなく、全体的なシナリオを含めて
やりたいことを書いていただけないでしょうか。

そうしていただけると、もし他に正規表現を使うよりもっと適切なアプ
ローチがあれば、その方法での提案も出てくるかもしれません。

質問者さんが大ベテランで、聞いた事だけに答えてもらえばいいという
ことであれば失礼しました。
引用返信 編集キー/
■74413 / inTopicNo.5)  Re[2]: 正規表現
□投稿者/ くま (6回)-(2014/12/25(Thu) 11:40:20)
今回は勉強でやっています。
純粋にsrcリンク部分を正規表現で取得するにはと
思っただけなのです。


No74412 (WebSurfer さん) に返信
> ■No74409 (くま さん) に返信
>
>>VS2010 ASP.Netで開発しています。
>
> ASP.NET とどう関係するのでしょう?
>
> できれば、局所的な部分の質問だけでなく、全体的なシナリオを含めて
> やりたいことを書いていただけないでしょうか。
>
> そうしていただけると、もし他に正規表現を使うよりもっと適切なアプ
> ローチがあれば、その方法での提案も出てくるかもしれません。
>
> 質問者さんが大ベテランで、聞いた事だけに答えてもらえばいいという
> ことであれば失礼しました。
引用返信 編集キー/
■74414 / inTopicNo.6)  Re[1]: 正規表現
□投稿者/ 魔界の仮面弁士 (196回)-(2014/12/25(Thu) 12:00:01)
No74409 (くま さん) に返信
> 分類:[VBScript] 
> VS2010 ASP.Netで開発しています。

VBScript + Classic ASP なのか、
VB.NET + ASP.NET なのか…後者ですかね?


> 下記のタグからsrcの後ろ
どの程度の揺れを許容するのかにも寄りますが:

(?<=<td.*>\r\n<img[^>]+src=")[^"]+(?=".*?/>\r\n</td>)


・改行コードは CR か CRLF か LF か混在か
・class="test" ではない td や、alt="test" ではない img を扱うか否か
・td と img の間に、改行が含まれないパターンもあるのか
・td の中に 複数の img タグがありえるか
・「<td id="<img">」などのパターンまで考慮するのか
・タグの前後に改行以外のホワイトスペース(空白、タブ)を許容するか
・「<img SRC="http://example.com/" >」を許容するか
・「<img src=http://example.com/ >」を許容するか
・「<img src='http://example.com/' />」を許容するか
・「<img src="http://example.com/?word=\"test\"" />」を許容するか
引用返信 編集キー/
■74415 / inTopicNo.7)  Re[3]: 正規表現
□投稿者/ WebSurfer (446回)-(2014/12/25(Thu) 12:10:30)
No74413 (くま さん) に返信
> 今回は勉強でやっています。
> 純粋にsrcリンク部分を正規表現で取得するにはと
> 思っただけなのです。

単に正規表現の勉強とのこと、了解しました。

ご自分ではどこまで実装されたのでしょうか?

特に期待するのはどういう動きで、それとご自分の実装がどう期待通りに
ならないのか書いていただけませんか?
引用返信 編集キー/
■74416 / inTopicNo.8)  Re[4]: 正規表現
□投稿者/ くま (7回)-(2014/12/25(Thu) 13:06:59)
@"(?<=class=""test""\>\<img.*src="").*(?="" />)")
ここまで出来ています。

No74415 (WebSurfer さん) に返信
> ■No74413 (くま さん) に返信
>>今回は勉強でやっています。
>>純粋にsrcリンク部分を正規表現で取得するにはと
>>思っただけなのです。
>
> 単に正規表現の勉強とのこと、了解しました。
>
> ご自分ではどこまで実装されたのでしょうか?
>
> 特に期待するのはどういう動きで、それとご自分の実装がどう期待通りに
> ならないのか書いていただけませんか?
引用返信 編集キー/
■74417 / inTopicNo.9)  Re[5]: 正規表現
□投稿者/ 魔界の仮面弁士 (197回)-(2014/12/25(Thu) 13:15:34)
No74416 (くま さん) に返信
> @"(?<=class=""test""\>\<img.*src="").*(?="" />)")
> ここまで出来ています。

ちょっと待った。その文字列リテラルは C# の構文ですよね?
最初の質問時には、
>> 分類:[VBScript] 
とあったはずですが、Visual Basic ですら無いのでしょうか?
引用返信 編集キー/
■74418 / inTopicNo.10)  Re[6]: 正規表現
□投稿者/ くま (8回)-(2014/12/25(Thu) 13:21:25)
大変失礼いたしました。申し訳ありません。
asp.net の c#です。

No74417 (魔界の仮面弁士 さん) に返信
> ■No74416 (くま さん) に返信
>>@"(?<=class=""test""\>\<img.*src="").*(?="" />)")
>>ここまで出来ています。
>
> ちょっと待った。その文字列リテラルは C# の構文ですよね?
> 最初の質問時には、
> >> 分類:[VBScript] 
> とあったはずですが、Visual Basic ですら無いのでしょうか?
引用返信 編集キー/
■74419 / inTopicNo.11)  Re[7]: 正規表現
□投稿者/ WebSurfer (447回)-(2014/12/25(Thu) 14:17:04)
No74418 (くま さん) に返信
> 大変失礼いたしました。申し訳ありません。
> asp.net の c#です。

以下の記事を読んでいただいて、ある程度正規表現に関する知識をつけてから、再度
問題を整理して話を続けることをお勧めします。

ASP.NET の正規表現
http://msdn.microsoft.com/ja-jp/library/ms972966.aspx

正規表現の基本
http://dobon.net/vb/dotnet/string/regex.html

そうしていただかないと話がうまく通じないような気がします。

引用返信 編集キー/
■74420 / inTopicNo.12)  Re[8]: 正規表現
□投稿者/ くま (9回)-(2014/12/25(Thu) 14:33:02)
No74419 (WebSurfer さん) に返信

> 以下の記事を読んでいただいて、ある程度正規表現に関する知識をつけてから、再度
> 問題を整理して話を続けることをお勧めします。

おっしゃる通りです。
ただ、今回の件だけは解決をしたいのですが。
引用返信 編集キー/
■74421 / inTopicNo.13)  Re[7]: 正規表現
□投稿者/ 魔界の仮面弁士 (198回)-(2014/12/25(Thu) 14:38:35)
No74418 (くま さん) に返信
> 大変失礼いたしました。申し訳ありません。
> asp.net の c#です。

だとすると、

> >>@"(?<=class=""test""\>\<img.*src="").*(?="" />)")
これは、
  @"(?<=class=""test""\>\<img.*src="").*(?="" />)"
なのではありませんか? \も余計な気がしますが。

// var url = Regex.Match(s, @"(?<=class=""test""\>\<img.*src="").*(?="" />)");



>>>ここまで出来ています。

このままだとマッチしないと思いますよ。

提示頂いた正規表現の場合、
 「class="test"><img〜〜〜src="」と「" />」に囲まれた『0文字以上の文字列』
という意味になるかと思います。

しかし今回の場合、「<img」の前にあるのは
「class="test">」ではなく「class="test">{改行}」ですよね。


改行だけでなく、タブや空白などを含む可能性も考慮すると、
 var url = Regex.Match(s, @"(?<=class=""test""\s*>\s*<img.*src="").*(?="" />)");
あたりで如何でしょうか。
元データの表記揺れ次第では、これでもまだ十分では無いですが。
引用返信 編集キー/
■74422 / inTopicNo.14)  Re[8]: 正規表現
□投稿者/ くま (10回)-(2014/12/25(Thu) 14:49:46)
No74421 (魔界の仮面弁士 さん) に返信
誠にありがとうございます。
この記述で取得できました。もっと勉強してみます。
ありがとうございました。
解決済み
引用返信 編集キー/
■74423 / inTopicNo.15)  Re[9]: 正規表現
□投稿者/ shu (650回)-(2014/12/25(Thu) 14:53:02)
No74420 (くま さん) に返信

<td>〜</td>までを正規表現で抜き出して
後はXmlDocumentに任せるとか。以下VB.NETサンプルです。


        Dim Data = "<td class=""test"">" & vbCrLf &
                 "   <img alt=""test"" src=""http://www.google.jp"" />" & vbCrLf &
                 "</td>"
        Dim doc As New XmlDocument
        doc.LoadXml(Data)
        Dim ndTD = doc.ChildNodes(0)
        Dim ndImg = ndTD.ChildNodes(0)
        Dim src = ndImg.Attributes("src")
        Console.WriteLine(src.Value)


引用返信 編集キー/
■74424 / inTopicNo.16)  Re[2]: 正規表現
□投稿者/ くま (11回)-(2014/12/25(Thu) 16:58:55)
解決です。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -