Home  >  Article  >  Backend Development  >  PHP experience: parsing preg_match and preg_match_all functions_PHP tutorial

PHP experience: parsing preg_match and preg_match_all functions_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:02:31929browse

正则表达式在 PHP 中的应用
在 PHP 应用中,正则表达式主要用于:
•正则匹配:根据正则表达式匹配相应的内容
•正则替换:根据正则表达式匹配内容并替换
•正则分割:根据正则表达式分割字符串
在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数。二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明。
定界符
Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用 / 作为定界符。具体使用见下面的例子。
提示
尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数。
preg_match()
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
语法:
int preg_match( string pattern, string subject [, array matches ] )
参数说明:

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

if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){
print "A match was found:". $matches[0];
} else {
print "A match was not found.";
}
?>

浏览器输出:
复制代码 代码如下:

A match was found: PHP

在该例子中,由于使用了 i 修正符,因此会不区分大小写去文本中匹配 php 。
提示
preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数。
例子 2 ,从一个 URL 中取得主机域名 :
复制代码 代码如下:

// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","http://www.jb51.net/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

浏览器输出:
复制代码 代码如下:

域名为:jb51.net

preg_match_all()
preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
语法:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 存储匹配结果的数组
flags

可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有:

  1. PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推
  2. PREG_SET_ORDER:对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推
  3. PREG_OFFSET_CAPTURE:如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量
The following example demonstrates displaying all keywords (php) in the
 tags in the text in red. 
Copy code The code is as follows:

$str = "
Learning php is A happy thing. 
All phpers need to work together! 
";
$kw = "php";
preg_match_all('/
 ([sS]*?)
/',$str,$mat);
for($i=0;$i $mat[0][$i] = $mat[1][$i];
$mat[0][$i] = str_replace($kw, ''.$kw.'', $mat[0][$i]);
$str = str_replace($mat[1][$i], $mat[0] [$i], $str);
}
echo $str;
?>

Regular matching Chinese characters
Regular matching Chinese characters are slightly different depending on the page encoding:
•GBK/GB2312 encoding: [x80-xff>]+ or [xa1-xff]+
•UTF-8 encoding: [x{4e00 }-x{9fa5}]+/u
Example:
Copy code The code is as follows:

$str = "Learning php is a happy thing.";
preg_match_all("/[x80-xff]+/", $str, $match) ;
//UTF-8 use:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
print_r($match );
?>

Output:
Copy code The code is as follows: >
Array
(
[0] => Array
(
[0] => Learning
[1] => is a joy Things.
)

)

http://www.bkjia.com/PHPjc/327927.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/327927.htmlTechArticleApplication of regular expressions in PHP In PHP applications, regular expressions are mainly used for: Regular matching: according to Regular expression matches the corresponding content regular replacement: match according to the regular expression...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn