人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VB.NET の正規表現を勉強しています。

下記の ? は何の意味なのでしょうか?

r = New Regex( _
"<a\s+[^>]*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>[^\s>]+))[^>]*>(?<2>[^<]*)", _
RegexOptions.IgnoreCase Or RegexOptions.Compiled)

●質問者: yamazakiis
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:href regex VB.NET 勉強 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●27ポイント

http://www.atmarkit.co.jp/fdotnet/basics/regex01/regex01_04.html

“?”は「直前の要素(または1文字)が0個または1個あるときにマッチする」メタ文字である。“*”の機能を少し弱めたようなメタ文字で、2文字以上の連続にはマッチしない。

(? の場合は (が ある場合と ない場合の両方ということになります。

◎質問者からの返答

( ってそういう意味ですか?

() でセットなのかと思っていましたが・・


2 ● きゃづみぃ
●27ポイント

http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html

(?:...)

パターンの非格納グループ化

(?=...)

先読み

直前のパターンに続いて、このパターンが出現する物がマッチします。ただし、このパターン自体はマッチ文字列には含まれません。

(?!...)

否定先読み

直前のパターンに続いて、このパターンが出現しない物がマッチします。ただし、このパターン自体はマッチ文字列には含まれません。

(?#Text)

コメント

コメントです。この中の物は無視されます。マッチに影響は与えません。

この中では‘)’をエスケープすることは出来ません。


3 ●
●26ポイント

<a\s+[^>]*href\s*=\s*

上記の部分は問題ないですよね。省略します。

(?:""(?<1>[^""]*)""|(?<1>[^\s>]+))

ここが難しいと思います。

まず、最初の (?: と最後の ) は内容を単純にグルーピングするための括弧です。

この括弧にマッチした内容をメモリに保存しない時に使います。

さらに分解してこの括弧の中身の説明に移ります。

""(?<1>[^""]*)""|(?<1>[^\s>]+)

ここで一番強い演算子は | です。

OR という意味ですので、" | の前、または | の後"という意味になります。

それぞれ説明します。

""(?<1>[^""]*)""

VB系ではダブルクォートが特殊な意味を持ちますので、エスケープしています。

意味はダブルクォートで始まり、括弧部分、ダブルクォートで終わるもの、となります。

(?<1>[^""]*)

この部分が一番気になっている部分だと思いますが、これは<>内のグループ名で内容を保存する括弧になります。

つまり 1 という名前で [^""]* を保存します。

[^""]* はダブルクォートではない文字の0文字以上の繰り返しです。

この内容はMatch.Groups(1)で後から参照できます。

[参考URL]

| の後半部分に移ります。

(?<1>[^\s>]+)

この部分は、空白文字、大なり記号ではない文字列の1文字以上の繰り返しを 1 という名前で保存する、という意味です。

これで前半部分は終了です。後は同じ考え方で意味を理解できると思います。

[^>]*> は大なり記号ではない文字の0文字以上の繰り返しの後、大なり記号、という意味です。

(?<2>[^<]*)

この部分は 2 という名前で小なり記号ではない文字の0文字以上の繰り返しを保存します。

この内容はMatch.Groups(2)で後から参照できます。

参考になれば幸いです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ