2

正規表現を持つ〜このように:

blablabla.+?(?:<a href="(http://.+?)" target="_blank">)?

URL が見つかったらキャプチャしたいのですが、何かが見つかりましたが、リンクが取得できません (キャプチャは常に空です)。このように最後に疑問符を削除すると

blablabla.+?(?:<a href="(http://.+?)" target="_blank">)

これは、末尾にリンクがあるものにのみ一致します... 午前 2 時 40 分です... アイデアがありません...

- 編集 -

サンプル入力:

blablabla asd 1234t535 <a href="http://google.com" target="_blank">

期待される出力:

match 0:

    group 1: <a href="http://google.com" target="_blank">
    group 2: http://google.com`

「http://google.com」または「」が欲しいだけです

4

3 に答える 3

0

それは末尾ですか?理由: オプションとしてマークすることで、.+? それをつかむために。

blablabla.*(?:<a href="((http://)?.*)".+target="_blank".*>)

少し変更しました....+?は基本的に と同じ.*です。href に何もない場合 ("" が必要だと示した場合)、http と末尾のテキストをオプションにする必要があります。また、.*前にあるtargetということは、少なくとも 1 つのスペースまたは文字があることを意味しますが、それ以上 (複数の空白またはその他の属性) がある場合があります。 .*の前に、>空白またはその他の属性を後ろに置くことができることを意味します。

がない場合、これは行にまったく一致しません<a href...>が、それはあなたが望むものですよね?

(?: ... )全体をキャプチャする必要がない場合は、完全に削除できます<a href...>

属性が指定された順序でリストされていない場合、これは失敗します... これは、html の解析に正規表現を実際に使用できない理由の 1 つです。ただし、href が常にターゲットの前に来ることが確実な場合は、これで必要なことが行われるはずです。

于 2011-03-07T03:22:28.867 に答える
0

文字列全体の一致を行っていますか? .*その場合は、最初の正規表現の末尾に追加して、一致するものを確認してください。最初の正規表現の問題はblablabla、(空のキャプチャにつながる)ため、その後のすべてに一致する可能性がありますが、括弧で囲まれた部分は、文字列の最後にない限りタグ.+?と一致しません。aちなみに、予想される出力を見ると、キャプチャ 1 が URL になります。が先頭にあるため、HTML タグ全体を囲む括弧はキャプチャされません?:

于 2011-03-07T01:45:46.620 に答える
0

.+ は必要ありませんか? 最初に、正規表現はとにかく入力全体を検索します

また、空白の直後に「>」を閉じて、一致を制限します

(?:<a href="(http://.+?)" target="_blank".*?>)

正規表現テスト

于 2011-03-07T02:09:43.807 に答える