php在Regex中获取分组值

时间:2014-06-28 15:24:14

标签: php regex

我正在使用php正则表达式,但我无法使用()

检索我分组的值

这是我的意见 <img src="http://www.example.com/image.jpg" title="title" /> 我只需要src值,这是我的正则表达式'"<img src=\"(.*?)\".*?\/>"'

如果我可以像java模式一样检索第一组我的问题是解决的

preg_match_all('"<img src=\"(.*?)\".*?\/>"', $source, $re);
print_r($re);

并返回完整的图片代码,例如<img src="http://www.example.com/image.jpg" title="title" />

3 个答案:

答案 0 :(得分:1)

您正在使用preg_match_all,因此您也需要传递索引,使用print_r($re[1]);来获得结果。

答案 1 :(得分:1)

要匹配单个字符串,preg_match功能就足够了。您无需使用preg_matchall功能。如果要匹配更多字符串,则可以使用preg_matchall函数。并且首先尝试通过模式匹配确切的字符串,而不是去分组。如果无法匹配特定的字符串,那么请进行分组。

在下面,匹配src属性的确切值。

您可以通过两种方式获得src的值,

1。积极的背后隐藏

正则表达式:

(?<=src=\")[^\"]*

PHP代码:(通过match_all

<?php
$string = "<img src=\"http://www.example.com/image.jpg\" title=\"title\" />";
$regex =  '~(?<=src=\")[^\"]*~';
preg_match_all($regex, $string, $matches);
print_r($matches);
?>

PHP代码:(通过match

<?php
$string = "<img src=\"http://www.example.com/image.jpg\" title=\"title\" />";
$regex =  '~(?<=src=\")[^\"]*~';
if (preg_match($regex, $string, $m)) {
    $yourmatch = $m[0]; 
    echo $yourmatch;
    }
?> //=> http://www.example.com/image.jpg

<强>解释

  • (?<=src=\")此处使用正面后视。因此,正则表达式引擎将匹配标记放在src="
  • 之后
  • [^\"]*现在它开始匹配任何字符零次或多次但不匹配"。当找到"时,它会停止匹配字符。

2。使用\K

<强>正则表达式:

src=\"\K[^\"]*

PHP代码(通过match

<?php
$string = "<img src=\"http://www.example.com/image.jpg\" title=\"title\" />";
$regex =  '~src=\"\K[^\"]*~';
if (preg_match($regex, $string, $m)) {
    $yourmatch = $m[0]; 
    echo $yourmatch;
    }
?>  //=> http://www.example.com/image.jpg

<强>解释

  • \K重置报告的匹配的起点。任何以前消费的字符都不再包含在最终匹配中。
  • src=\"\K因此它会丢弃之前匹配的src="
  • [^\"]*匹配任何字符零次或多次但不匹配"

答案 2 :(得分:0)

我明白了! 我们可以为第一个Grouped

编码
print_r($re[1]);