本文目录一览:
- php中的preg_match()函数
- PHP正则相关的几个preg函数
- PHP函数preg_match_all正则表达式的基本使用详细解析
- 如何运用PHP函数preg
- [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]
内容就是原字符串 subject
,matches[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
和内容取出,如 biuuu
、biuuu_2
、biuuu_3
、jb51.net
、jb51.net2
和 jb51.net3
。
分析:
字符串是一个基本的 HTML 元素,每一个 DIV
元素对应一个 ID
和内容,并且是独立的。首先考虑如何取出一个 DIV
内的 ID
值和内容,如:jb51.net
,然后匹配其它类似的元素。
一个 DIV
中须要取出两个值,也就是两个匹配的表达式:
- 第一个表达式用于匹配
ID
值(如biuuu
)。 - 第二个表达式用于匹配
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)”。
主要区别有:
preg_replace()
里面的正则可以写成/..../
,而ereg_replace()
里面的正则需写成.....
。- 在逆向引用时,
preg_replace()
可使用 0-99 个,而ereg_replace()
最多为 9 个。 preg_replace()
能操作数组,而ereg_replace()
不可以。ereg
默认使用贪婪模式,并且不能修改。preg
的速度比ereg
要快很多。 现在 PHP 基本都用preg
了,ereg
是过时的东西。