正则表达式隔离id

时间:2012-02-16 03:12:56

标签: php

我想有一个php函数,它将删除任何输入并仅保留一个数字ID,在下面的示例中为36816268。

输入可以是这样的:

<iframe src="http://player.vimeo.com/video/36816268" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

或者像这样

<iframe src="http://player.vimeo.com/video/36816268" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><p><a href="http://vimeo.com/36816268">ABCinema</a> from <a href="http://vimeo.com/eeseitz">Evan Seitz</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

我可以将第一部分剥离为

preg_match('%.*http://player.vimeo.com/video/%im', $subject)

3 个答案:

答案 0 :(得分:1)

由于我找不到合适的副本链接(已经多次询问类似的问题),我会把它作为答案。只要URL的其余部分不需要更改,这很容易。

$matches = array();
preg_match("~.*http://player.vimeo.com/video/(\d+)~im", $subject, $matches);

print_r($matches);
echo $matches[1];

Array
(
    [0] => <iframe src="http://player.vimeo.com/video/36816268
    [1] => 36816268
)

答案 1 :(得分:0)

$str = '<iframe src="http://player.vimeo.com/video/36816268" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';

preg_match('#src=\"[^\d]+(\d+)\"#Ui', $str, $m);

print_r($m);

答案 2 :(得分:0)

您必须匹配组中的ID并将整个字符串替换为ID。

示例脚本:

<?php
$string = '<iframe src="http://player.vimeo.com/video/36816268" width="400" height="225" 
frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
echo preg_replace('#^.*video/(\d+).*$#i', '$1', $string); // prints '36816268'
?>

模式说明:

  • #启动模式
  • ^在字符串
  • 的开头开始匹配
  • .*匹配任何内容,除了换行符
  • video/匹配字符串视频/
  • (开始捕获群组,群组1
  • \d+匹配一个或多个数字
  • )关闭捕获小组
  • .*匹配任何内容
  • $匹配字符串的结尾
  • #结束模式
  • i使匹配大小写不敏感