1

我有一个示例字符串如下

$string = '
http://image.gsfc.nasa.gov/image/image_launch_a5.jpg
http://pierre.chachatelier.fr/programmation/images/mozodojo-original-image.jpg
http://image.gsfc.nasa.gov/image/image_launch_a5.jpg

Alot of text

http://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif

more text';

我希望能够提取前三个图像的 url(基本上是字符串开头的任何图像#),但在我的非图像文本开始后不提取任何图像 URL。我可以成功地使用正则表达式来获取所有图像 URL,但它也可以获取文本内的最后一个 google.com 图像。

感谢您的任何想法!

4

2 回答 2

2

让 R 成为正则表达式来获取图像 url

您需要抓住 (R)+ ,即出现 0 次或多次 R

或主要是 ((R)(w)?)+

其中 w 表示匹配空格的正则表达式。

于 2012-06-23T22:31:29.193 回答
1

如何避免使用正则表达式并explode改为使用?

$string = '....';

$urls = array();
$lines = explode(PHP_EOL,$string);
foreach ($lines as $line){
  $line = trim($line);

  // ignore empty lines
  if (strlen($line) === 0) continue;

  $pUrl = parse_url($line);

  // non-valid URLs don't count
  if ($pUrl === false) break;

  // also skip URLs that aren't images
  if (stripos($pUrl['path'],'.jpg') !== (strlen($pUrl['path']) - 4)) break;

  // anything left is a valid URL and an image
  // also, because a non-url fails and we skip empty lines, the first line
  // that isn't an image will break the loop, thus stopping the capture
  $urls[] = $line;
}
var_dump($urls);

IDEOne的示例

于 2012-06-23T22:31:50.810 回答