0
4

4 に答える 4

2

正規表現を試す

$regex = '/(<a href="([^"]+)\.jpg")[^>]*>/iU';

'\1>' に置き換えます。

ノート:

  • "; の前のエスケープを削除しました。必要ありません (必要に応じてそのままにしておくこともできますが、違いはありません)。
  • で終わるリンクのみに一致するよう\.jpgに、最後の直前に明示を追加しました。「.jpg」と同様に「.jpeg」を許可することを検討することもできます(ただし、前者はそれほど一般的ではありません)。".jpg\.jpe?g
  • 次のようなオプションの追加属性を許可するために、最初の の[^>]*前にを追加しました><a href=...>name="asdf"
  • 置換(<a href="xxx")できるように、ビットの周囲にキャプチャ ブラケットを追加しました(したがって、すべての余分な属性を取り除きます)。\1>

正規表現生成ツールについては、正規表現を生成するツールを知りません。あなたの最善の策は、自分で正規表現を学び、インタラクティブなテスターを使用してすばやく開発することだと思います。

regexr.comを強くお勧めします。

そのリンクをたどると、私が入力した正規表現と、それをいじるためのいくつかのテストデータが正確に表示されます。

次に、正規表現をいじって、結果をリアルタイムで確認できます。これは、正規表現を迅速に開発するのに非常に役立ちます。

(ただし、regexr.com は貪欲でない 'U' タグを提供していません。これをシミュレートするには、正規表現ですべて+を to+?および*toに変換するだけです)。*?

于 2012-04-04T01:28:02.810 に答える
1

これは、おそらくあなたが期待していた方法とは異なります...

<?php
// set up to parse our input
$dom = new DOMDocument();
$dom->loadHTMLFile("input.html");
$xpath = new DOMXPath($dom);

$anchors = $xpath->query("//a[contains(@href, 'http') and contains(@href, '.jpg')]");

foreach ($anchors as $anchor) {
  echo $anchor->C14N() . "\n";
}
?>
于 2012-04-04T11:05:26.937 に答える
1

この正規表現を正確に何のために使用しているのかはわかりませんが、これはうまくいくと思います:

$your_string = '<a href="http://site.com/folder/img1.jpg" name="test">';
preg_match('@<a href="(.*?)".*?>(.*<\/a>)?@', $your_string, $matches);

print_r($matches) // Array ( [0] => http://site.com/folder/img1.jpg )
于 2012-04-04T01:23:13.077 に答える
1

http://gskinner.com/RegExr/をチェックしてください。

私はそれが大好きです。

独自のパターンを構築する方法を教えてくれます。

Regex (正規表現) は、サーバー側およびクライアント側のプログラミング言語に適用できる非常に貴重なプログラミング スキルです。

于 2012-04-04T01:24:24.500 に答える