1

yahooパイプを使用してコンテンツからURLを抽出しようとしていますが、そのためにはURLの前のすべてと後のすべてを一致させる必要があります:

<div class="medium mode player"><div class="info-header"><a rel="nofollow" target="_blank" 
href="http://i1.sndcdn.com/artworks-000059185212-dsb68g-crop.jpg?3eddc42" class="artwork" 
style="background:url(http://i1.sndcdn.com/artworks-000059185212-dsb68g-badge.jpg?
3eddc42);">Dream ft. Notorious BIG Artwork</a> <h3><a rel="nofollow" target="_blank" 
href="http://soundcloud.com/tom-misch/dream-ft-notorious-big">Dream ft. Notorious BIG</a>
</h3> <span class="subtitle"><span class="user tiny online"><a rel="nofollow" 
target="_blank" href="http://soundcloud.com/tom-misch" class="user-name">Tom Misch</a>

私が欲しいURLはそれです: http://soundcloud.com/tom-misch/dream-ft-notorious-big

正規表現について少し学ぼうとしましたが、理解したと思っても何もうまくいきません

あなたの何人かがその人たちについて私を助けてくれることを願っています! 乾杯

4

1 に答える 1

1

これはおそらくうまくいきます。プロトコルを使用し、サブドメインを持たない、soundcloud からの URL のみに一致しますhttp。グループは完全な URL をキャプチャして使用できるようにし、遅延量指定子を使用して最初の引用に一致させます。

(http://soundcloud.*?)"

これは、遅延修飾子を使用せず、代わりに否定されたクラスを使用して、引用符以外のものに一致させる代替手段です。

(http://soundcloud[^"]+)

ライブラリと使用するフラグによっては、両方の正規表現が実際には両方の URL に一致することに注意してください。最初の出現のみまたは両方を返す可能性があります。最初の出現のみを使用するか、正しい形式の結果をさらに確認できます。

本当に正規表現だけを使用したい場合で、正規表現ライブラリが先読みをサポートしている場合は、次のようにすることができます。

(http://soundcloud.*?)\s+(?!class="user-name")

後続の文字列が次の場合、先読み(?!=は一致しません。class="user-name"


私も知りませんでした。yahooパイプが使用するライブラリを見つけました。URLの周りのすべてを置き換えたい場合は、正規表現を次のように変更できます。

^.*?(http://soundcloud[^"]+).*$

そして$1、置換文字列で使用して、URLを元に戻します( と混合.*?したことに注意して[^"]+ください。これは、文字列全体を2番目のURLではなく最初のURLに置き換えたいためです.*。ポイントまで一致させるには最初のURLが必要です最初の URL と停止の、それが遅延量指定子の場合です)。

于 2013-11-12T01:03:43.823 に答える