0

単一の HTML 段落にある URL を取得して、PHP の .xml で抽出しようとしていますpreg_replace_callback。現在、WordPress は以下を使用してこれを行います。

preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', 'callback_function', $string );

しかし、それは独自の行の URL に一致します。その周りに HTML はありません。私がする必要があるのは、次のようなものから URL を照合することです。

<p>http://youtube.com/</p>

段落タグの前後のスペースは気にしません。その URL を抽出して、より詳細な情報に置き換えるだけpreg_replace_callbackです。

そこに何か助けはありますか?


更新: さて、私は次のようないくつかの段落を持つ投稿のテキストを持っています:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et nunc vel felis vulputate tincidunt. In dapibus tempus sollicitudin. Nullam quis ultricies tortor. Ut malesuada aliquet enim. Aliquam et lobortis urna. Sed commodo malesuada malesuada. Donec cursus nisi nec mauris venenatis pharetra. Curabitur ut leo purus.</p>

<p>http://youtube.com/</p>

<p>Etiam non odio tellus, vel imperdiet nunc. Praesent rutrum sagittis purus, quis pretium eros varius ut. http://google.com/ Ut id orci eu lacus aliquam luctus. Sed dolor quam, suscipit eu dapibus feugiat, lacinia vitae augue.</p>

そのテキストから抽出したいのは、段落内のhttp://youtube.com/だけです。別の段落に Google.com へのリンクがあるようですが、それは必要ありません。私が欲しいのは、そのリンク (またはリンク) が独自の段落だけにあることだけです。コールバック 'http://youtube.com/' に引数として渡されます。

4

2 に答える 2

1

これを試すことができます:http://regex101.com/r/rN4vB3

/<p>\s*(https?:\/\/(?:(?!<\/?p>).)+)\s*<\/p>/

<p>ロジックは、で始まるタグを探し、httpに到達するまで他のすべてを取得するというものです</p>。最初の後方参照は URL を保持します。

これは最適な解決策ではないかもしれませんが、あなたが求めたとおりにする必要があります。

于 2012-08-24T20:09:15.203 に答える
1

私はあなたの質問を誤解しているかもしれませんが、これは (理想的には) テキスト ブロック内の任意の URL に一致する REGEXP です。

/<[A-Za-z0-9]+[^>]*>https?:\/\/([A-Za-z0-9-]\.)?[A-Za-z0-9][A-Za-z0-9-]+?\.[A-Za-z0-9]+[A-Za-z0-9-\._~:\/\?#\[\]@!$&'()\*+,;=]*<\/[A-Za-z0-9]+>/gi

正規表現は信じられないほど複雑であり、ここでは考慮していない特殊なケースがほぼ確実に存在することを心に留めておいてください。ここで機能しない例で質問を更新するか、コメントを残していただければ、回答を更新します。

更新 2
これは、かなり回復力のあるものです。HTML タグのオプションのサブドメイン、https、および属性を考慮に入れています。

于 2012-08-24T20:14:08.557 に答える