4

[JSoup ディスカッション ページで、ここで質問するよう提案されました。]

したがって、私は正規表現の専門家ではありませんが、jsoup getElementsByAttributeValueMatching() メソッドから得られる結果について疑問に思っています。

(とりわけ) 次のリンクを含む html ページがあるとします。

<a href="/tweb/tiles/twr/EIDS_AT_20130108T134335/01/">Parent Directory</a>
<a href="1357681618315/">1357681618315/</a>
<a href="1357681649996/">1357681649996/</a>

そして、次のクエリを実行します。

Elements dirs = baseDir.getElementsByAttributeValueMatching("href", Pattern.compile("[0-9]+/"));

数字のみ(および最後にスラッシュ)を持つ2つのリンクのみを取得することを望んでいます。

ただし、3 つのリンクはすべて元に戻ります。

3 つの href 文字列を使用してその正規表現に対する Java のパターン マッチャーの応答をチェックする簡単なテスト プログラムを作成しました。

String a = "/tweb/tiles/twr/EIDS_AT_20130108T134335/01/";
String b = "1357681618315/";
String c = "1357681649996/";

Pattern p = Pattern.compile("[0-9]+/");

System.out.println("a:"+ p.matcher(a).matches());
System.out.println("b:"+ p.matcher(b).matches());
System.out.println("c:"+ p.matcher(c).matches());

戻り値: a:false b:true c:true

それで、私の質問は、何が欠けているのですか?

ありがとう、ライナス

4

2 に答える 2

5

Jsoup はMatcher#find()ではなくを使用しMatcher#matches()ます。だから、あなたは自分自身を供給する必要が^あり$ます。

Elements dirs = baseDir.getElementsByAttributeValueMatching(
    "href", Pattern.compile("^[0-9]+/$"));

以下は、違いを説明する関連性のあるjavadocの抜粋です(強調は私のものです)

探す

...

戻り値:

true入力シーケンスのサブシーケンスがこのマッチャーのパターンと一致する場合にのみ

マッチ

...

戻り値:

trueリージョン シーケンス全体がこのマッチャーのパターンと一致する場合にのみ

Jsoup がのfind()代わりに使用する理由についてはmatches()、その作成者に質問する必要があります。

于 2013-01-14T18:53:49.530 に答える