php的preg(php的preg_match)

发布时间:2022-11-13

本文目录一览:

  1. php中的preg_match()函数
  2. PHP正则相关的几个preg函数
  3. PHP函数preg_match_all正则表达式的基本使用详细解析
  4. 如何运用PHP函数preg
  5. [PHP ereg 和 preg 的区别](#PHP ereg 和 preg 的区别)

php中的preg_match()函数

preg_match('/\\.(gif|jpeg|png|bmp|doc|)$/i', $filename) 匹配正则表达式,意思是点开头,然后以那些扩展名结尾。/i 表示不区分大小写。 这两个函数的用法不同、返回值不同。第二个是全局匹配,搜索所有匹配内容并以数组的模式返回。 关于错误问题,是楼主没有区分单引号和双引号之间的区别。双引号之间的变量会被替换成变量的值,而单引号之间的变量会直接当成字符串处理。

PHP正则相关的几个preg函数

  • preg_match: 字符串比对解析。
  • preg_match_all: 字符串整体比对解析。
  • preg_replace: 字符串比对解析并取代。
  • preg_split: 将字符串依指定的规则切开。

preg_match

字符串比对解析。 语法: int preg_match(string pattern, string subject, array [matches]); 返回值: 整数/数组 函数种类: 资料处理 内容说明: 本函数以 pattern 的规则来解析比对字符串 subject。比对结果返回的值放在数组参数 matches 之中,matches[0] 内容就是原字符串 subjectmatches[1] 为第一个合乎规则的字符串,matches[2] 就是第二个合乎规则的字符串,依此类推。若省略参数 matches,则只是单纯地比对,找到则返回值为 true

PHP函数preg_match_all正则表达式的基本使用详细解析

了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识。这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊。

实例代码:

$html = 'div id="biuuu"jb51.net/divdiv id="biuuu_2"jb51.net2/divdiv id="biuuu_3"jb51.net3/div';

实例要求:

分别将每一个 DIV 元素的 ID 和内容取出,如 biuuubiuuu_2biuuu_3jb51.netjb51.net2jb51.net3

分析:

字符串是一个基本的 HTML 元素,每一个 DIV 元素对应一个 ID 和内容,并且是独立的。首先考虑如何取出一个 DIV 内的 ID 值和内容,如:jb51.net,然后匹配其它类似的元素。 一个 DIV 中须要取出两个值,也就是两个匹配的表达式:

  1. 第一个表达式用于匹配 ID 值(如 biuuu)。
  2. 第二个表达式用于匹配 ID 的内容(如 jb51.net)。 正则表达式常用的表达式运用小括号,那么前面的元素将会变成如下形式:
div id="(biuuu)"(jb51.net)/div

表达式1:

[a-zA-Z0-9_]+

表示匹配大小写字母、数字和下划线。

表达式2:

[^]+

表示不匹配 <> 字符。

最终正则表达式:

/div\s+id="([a-z0-9_]+)"([^<]+)<\/div/

使用 preg_match_all 测试如下:

$html = 'div id="biuuu"jb51.net/divdiv id="biuuu_2"jb51.net2/divdiv id="biuuu_3"jb51.net3/div';
preg_match_all('/div\s+id="([a-z0-9_]+)"([^<]+)<\/div/', $html, $result);
var_dump($result);

结果:

array(3) {
  [0]=>
  array(3) {
    [0]=>
    string(30) "div id="biuuu"jb51.net/div"
    [1]=>
    string(33) "div id="biuuu_2"jb51.net2/div"
    [2]=>
    string(33) "div id="biuuu_3"jb51.net3/div"
  }
  [1]=>
  array(3) {
    [0]=>
    string(5) "biuuu"
    [1]=>
    string(7) "biuuu_2"
    [2]=>
    string(7) "biuuu_3"
  }
  [2]=>
  array(3) {
    [0]=>
    string(8) "jb51.net"
    [1]=>
    string(9) "jb51.net2"
    [2]=>
    string(9) "jb51.net3"
  }
}

共有三个表达式,分别显示每一个表达式匹配的值,并以数组的形式存储,这样就把每一个 DIV 元素的 ID 和内容取出。

如何运用PHP函数preg

对于初学者来说,大家对 preg_split 的说明如下:

array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )

返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。 如果指定了 limit,则最多返回 limit 个子串。如果 limit-1,则意味着没有限制,可以用来继续指定可选参数 flags

flags 可以是下列标记的任意组合:

  • PREG_SPLIT_NO_EMPTY:如果设定了本标记,则 preg_split() 只返回非空的成分。
  • PREG_SPLIT_DELIM_CAPTURE:如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。
  • PREG_SPLIT_OFFSET_CAPTURE:如果设定了本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。

提示:

如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode()str_split()

示例:

例 1672. preg_split 例子:取得搜索字符串的成分

// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split ("/[\s,]+/", "hypertext language, programming");

例 1673. preg_split 将字符串分割成字符

$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);

例 1674. preg_split 将字符串分割为匹配项及其偏移量

$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);

输出:

Array(
    [0] => Array ( [0] => h [1] => 0 )
    [1] => Array ( [0] => y [1] => 1 )
    [2] => Array ( [0] => p [1] => 2 )
    ...
)

PHP ereg 和 preg 的区别

PHP 里边 ereg 已经逐渐被 preg 替代了。

  • preg,代表“Perl 的正则表达式(Perl Regular Expressions)”。
  • ereg,代表“扩展的正则表达式(Extended Regular Expressions)”。

主要区别有:

  1. preg_replace() 里面的正则可以写成 /..../,而 ereg_replace() 里面的正则需写成 .....
  2. 在逆向引用时,preg_replace() 可使用 0-99 个,而 ereg_replace() 最多为 9 个。
  3. preg_replace() 能操作数组,而 ereg_replace() 不可以。
  4. ereg 默认使用贪婪模式,并且不能修改。
  5. preg 的速度比 ereg 要快很多。 现在 PHP 基本都用 preg 了,ereg 是过时的东西。