标题:php中preg_match与preg_match_all的区别

-------------------------------------------------------------------------------------------------------------------------------

时间:2013/8/6 20:24:30

-------------------------------------------------------------------------------------------------------------------------------

内容:

php中使用正则表达式可以很方便对文本进行处理

特别是结合curl就可以做很多事了

curl的用法 function fetch($Date){
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, "$Date");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents = curl_exec($ch);
curl_close($ch);
return $contents;
}

要获得html直接fecth(http://www.baidu.com)

就可以了

但是得到了源代码以后还要处理啊 比如我只要符合我要求的代码

这里就可以用正则表达式

要注意的是preg_match与preg_match_all的区别是前者就匹配一次 后者才是全部匹配

然后注意他们的返回值都是整数 0是没找到 1是找到了

正则的写法注意单引号开始中间用//隔开 是为了写额外的参数

里面正则有双引号以及/ 就要用\来转义下了比如"在正则里面是\"

/在正则里面是\/

 

然获取匹配到的参数注意preg_match_all($pattern,$content,$match)

$match是一个数组, 如果匹配到一次就用$match[0]

如果匹配到很多次就用$match[0][1]  $match[0][2]...

如果你在pattern里面写了括号 想同时匹配2个以上的字符串就可以用$match[1]

正则表达式在 PHP 中的应用

在 PHP 应用中,正则表达式主要用于:

在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数。二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明。

定界符

Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用 / 作为定界符。具体使用见下面的例子。

提示

尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数,请参见《PHP 字符串处理》。

preg_match()

preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。

语法:

int preg_match( string pattern, string subject [, array matches ] )
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

例子 1 :

php中使用正则表达式可以很方便对文本进行处理

特别是结合curl就可以做很多事了

curl的用法 function fetch($Date){
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, "$Date");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents = curl_exec($ch);
curl_close($ch);
return $contents;
}

要获得html直接fecth(http://www.baidu.com)

就可以了

但是得到了源代码以后还要处理啊 比如我只要符合我要求的代码

这里就可以用正则表达式

要注意的是preg_match与preg_match_all的区别是前者就匹配一次 后者才是全部匹配

然后注意他们的返回值都是整数 0是没找到 1是找到了

正则的写法注意单引号开始中间用//隔开 是为了写额外的参数

里面正则有双引号以及/ 就要用\来转义下了比如"在正则里面是\"

/在正则里面是\/

 

然获取匹配到的参数注意preg_match_all($pattern,$content,$match)

$match是一个数组, 如果匹配到一次就用$match[0]

如果匹配到很多次就用$match[0][1]  $match[0][2]...

如果你在pattern里面写了括号 想同时匹配2个以上的字符串就可以用$match[1]

正则表达式在 PHP 中的应用

在 PHP 应用中,正则表达式主要用于:

在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数。二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明。

定界符

Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用 / 作为定界符。具体使用见下面的例子。

提示

尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数,请参见《PHP 字符串处理》。

preg_match()

preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。

语法:

int preg_match( string pattern, string subject [, array matches ] )
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推

例子 1 :