1

だから、私にはうまくいかない正規表現を見つけようとしています。私はそれらを書くのが得意ではありませんでした.誰かが私がここで間違っていることを説明できることを望んでいました. Java を使用して HREF からアンカー テキストを取得しようとしています。テキストを正常に取得しようとしているページをダウンロードしていますが、何らかの理由で必要なものを削除しません。すべてのページで、クラスとタイトルは変わりません。実際、その特定のクラスとタイトルのページだけが必要です。

s = <span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</span><br>
s = s.replace(,""<span class=\"alwaysTheSameClass\"><a title=\"alwaysTheSameTitle\" href=\".*\">"")

これを行うたびに、同じように出力されます。私はやったs.containsが、それは間違っている。私が言ったように、私は正規表現が苦手です。これは簡単に使えると思っていましたが、明らかに間違っていました。ここで私の問題はどこですか?

みんなありがとう!

4

2 に答える 2

1

いくつかの問題があります.1つ目は</a>、あなたの例でアンカータグを閉じることです. /正規表現では、文字をエスケープして、 のようにする必要があります\/。あなたのstring.replaceステートメントには、検索対象の部分が欠けているようです。Javaマニュアルを参照してください

説明

この正規表現は、title 属性が であるすべてのアンカー タグを検索しますalwaysTheSameTitle。この式では、属性の値を一重引用符または二重引用符で囲む必要があります。これが見つかると、式は href 属性値と、開始アンカー テキストと終了アンカー テキストの間の文字列をキャプチャします。この式により、href 属性と title 属性をアンカー タグに任意の順序で表示できます。

<a\b(?=\s)(?=[^>]*\s\btitle=(["'])alwaysTheSameTitle\1)(?=[^>]*\s\bhref=(["'])((?:(?!\2)|.)*)\2)[^>]*>(.*?)<\/a>

ここに画像の説明を入力

グループ

グループ 0 には、開始タグから終了タグまでのアンカー タグ全体が含まれます。

  1. これは、属性値\1の周りに正しい終了文字があることを検証するために使用されます。title
  2. これは、属性値\2の周りに正しい終了文字があることを検証するために使用されます。href
  3. 引用符を含まない href 属性値の文字列を持ちます
  4. アンカータグ内に文字列がラップされます

試合例

与えられた入力テキスト<span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a></span><br>

マッチ

[0] => <a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a>
[1] => "
[2] => "
[3] => differentEveryTime
[4] => TextImTryingToPull

免責事項

内側のテキストは実際には HTML 解析エンジンを使用して引き出す必要があります。これにより、HTML テキストの正規表現解析が失敗するという問題のあるエッジ ケースが回避されます。ただし、HTML を制御している場合、および/またはこの式が期待どおりに機能しない、あいまいな、まれな、または違法な html で構成されるまれなエッジケースのリスクを受け入れる意思がある場合は、正規表現が機能する可能性がありますあなた

于 2013-06-15T03:47:30.497 に答える
0

DOM から回答を取得する方がはるかに簡単です。例えば:

var links = document.getElementsByTagName("a")
for (foo in links){
if(links[foo].title = "always the same"){
var bar = links[foo].href; //this should get your href
alert(bar);
}
}

乾杯、LC

于 2013-06-15T03:15:54.120 に答える