1

achore タグから href を見つけたい。だから私は正規表現を次のように使用しました

 <a\s*[^>]*\s*href\s*\=\s*([^(\s*|\>)]*)\s*[^>]*>\s*Text\s*<\/a>
 Options = Ignorecase + singleline

    <a href="/abc/xzy/pqr.com" class="m">Text</a>
So Group[1]="/abc/xzy/pqr.com"

しかし、内容が

     <a href="/abc/xzy/                     //Contains new line
    pqr.com" class="m">Text</a>  


so Group[1]="/abc/xzy/

コンテンツに改行が含まれている場合、「/abc/xzy/pqr.com」を取得する方法が知りたいです(\r\n)

4

1 に答える 1

0

キャプチャ グループは少し奇妙です:は文字クラスであり、 、ror a 文字クラス、アスタリスクなどで[^(\s*|\>)]*はない任意の文字と一致します。(\s*

ただし、キャプチャ グループの前後に引用符を付けることができます。

<a\s*[^>]*\s*href\s*\=\s*"([^(\s*|\>)]*)"\s*[^>]*>\s*Text\s*<\/a>
                         ^              ^

次に、文字クラスを[^"](引用符ではない)に変更します。

<a\s*[^>]*\s*href\s*\=\s*"([^"]*)"\s*[^>]*>\s*Text\s*<\/a>
                           ^^^^

regex101 デモ.

つまり、正規表現の代わりに適切な html パーサーを使用する方がよいでしょう。さまざまなシナリオを忘れてしまう可能性があるため、適切な正規表現を作成するのは面倒ですが、データがどのように取得されるかがわかっている場合は、正規表現が必要なものを取得するための迅速な方法になる可能性があります。

場合によっては単一引用符を使用し、まったく引用符を使用しないことを検討したい場合は、代わりにこれを試してください。

<a\s*[^>]*\s*href\s*=\s*((?:[^ ]|[\n\r])+)\s*[^>]*>\s*Text\s*<\/a>

regex101 を更新しました。

この正規表現には、代わりにこの部分が(?:[^ ]|[\n\r])+あり、スペース以外と改行 (および念のためキャリッジ リターン) を受け入れます。\s空白、タブ、改行、およびフォーム フィードが含まれていることに注意してください。

于 2013-08-29T06:33:05.997 に答える