0

2 つの条件のうちの 1 つが含まれていない限り、コンテンツからリンクを削除する正規表現を構築しようとしています。

<a.*?href=[""'](http[s]?:\/\/(.*?)\.link\.com)?\/(?!m\/).*?<\/a>

これは、ドメイン セクションの末尾に m/ がない link.com へのリンクと一致します。これを少し変更して、URL に m/ が含まれていても、pdf ファイルへのリンクである URL と一致しないようにします。

<a.*?href=["'](http[s]?:\/\/(.*?)\.brodies\.com)?\/(?!m\/).*?\.(?!pdf)["'].*?<\/a>

URL に "." が含まれている場合にのみ一致することを除いて、これは非常によく似ています。最後に-なぜそれが行われているのかがわかります。「。」を作ることができないようです。これにより、「。」の前に非貪欲なパターンが発生するため、オプションです。["'] に到達するまで続行します。

これを解決するには、どんな助けでも良いでしょう。

ありがとうポール

4

2 に答える 2

1

(?<!\.pdf)["']おそらくの代わりに使用したいと思うでしょう\.(?!pdf)["']

ただし、この式にはいくつかの問題があることに注意してください。それらを解決する最善の方法は、適切なHTMLパーサーを使用することです。

于 2012-05-31T17:40:20.950 に答える
1

まず、正規表現は、 XHTML 自己完結型タグを除く開始タグに一致します

とはいえ、(おそらく抑止されないため)これはまだ十分ではないという警告とともに、あなたがしようとしていることのわずかに優れた制約付きバージョンです!

<a[^>]+?href\s*=\s*["'](https?:\/\/[^"']*?\.link\.com)?\/(?!m\/)[^"']*?\.(?!pdf)[^"']*?["'][^>]*?>.*?<\/a>

この正規表現の実行例はhttp://rubular.com/r/obkKrKpB8Bにあります。

あなたの問題は、実際には、ドットの直後に引用文字を探していたということでした.(?!pdf)["']

于 2012-05-31T17:54:38.443 に答える