菜单

正则表达式之正则处理函数小结,正则表达式常用函数_php实例_脚本之家

2019年11月23日 - 4166am金沙下载

前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正
符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割,
匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。
和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。
下面我们来看一些常用的正则表达式处理函数。 1,preg_match()函数。
函数preg_match()执行一个正则表达式匹配,其定义如下: int preg_match (
string $pattern , string $subject [, array &$matches [, int $flags = 0
[, int $offset = 0 ]]] ) 实际上就是搜索subject中匹配pattern的部分,
以保存在数组matches中.请看示例: 复制代码
代码如下: 正则表达式{$pattern}和字符串{$string}匹配失败”; } ?>
2,preg_match_all()函数。
函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:
复制代码 代码如下:
正则表达式{$pattern}和字符串{$string}匹配失败”; } ?>
依旧是上面的示例(只换了正则处理函数为preg_match_all,但是匹配的结果数组内容不一样了。
3, preg_replace()函数
函数preg_replace()执行一个正则表达式替换,其定义如下: mixed
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [,
int $limit = -1 [, int &$count ]] )
实际上就是搜索subject中匹配pattern的部分,
以replacement进行替换.其中limit指的是每个模式在每个subject上进行替换的最大次数.
默认是 -1. 如果指定count,将会被填充为完成的替换次数. 注意:
A,如果subject是一个数组, preg_replace()返回一个数组,
其他情况下返回一个字符串. B,如果匹配被查找到, 替换后的subject被返回,
其他情况下返回没有改变的subject. 如果发生错误, 返回NULL .
C,子模式可以应用到参数replacement中,使用方式为\n或者${n}。(在正则表达式的模式中我们只能使用\n的形式来获取已经匹配的子模式,切记!)
D,如果使用模式修正符e,则参数replacement中可以解析函数。(在其它的正则表达式处理函数中,模式修正符e均被忽略!)
请看下面的综合示例: 复制代码
代码如下: ‘; echo $count; ?>
上例中,我们使用了模式修正符e,这样的话strtoupper()函数就可以当作字符串被解析,这就是模式修正符e的作用!而参数${1}和\2分别是子模式1和子模式2。上例的作用就是将字符串$string中匹配到的子模式php和mysql替换成大写字母!
4,preg_split()函数。
preg_split执行一个正则表达式分隔字符串。其定义如下: array preg_split
( string $pattern , string $subject [, int $limit = -1 [, int $flags =
0 ]] )
实际上就是将subject按照pattern分割,返回分割后的数组。其中,limit将限制分隔得到的子串最多只有limit个,
返回的最后一个子串将包含所有剩余部分.limit值为-1,
0或null时都代表”不限制”。 我们来看一个示例: 复制代码 代码如下:

1. preg_match — 执行一个正则表达式匹配int preg_match ( string
$pattern , string $subject [, array &$matches [, int $flags = 0 [,
int $offset = 0 ]]] )搜索subject与pattern给定的正则表达式的一个匹配.
pattern:要搜索的模式,字符串类型。subject :输入字符串。
matches:如果提供了参数matches,它将被填充为搜索结果。
$matches[0]将包含完整模式匹配到的文本,
$matches[1]将包含第一个捕获子组匹配到的文本,以此类推。flags:flags可以被设置为以下标记值:PREG_OFFSET_CAPTURE
如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量。
注意:这会改变填充到matches参数的数组,使其每个元素成为一个由
第0个元素是匹配到的字符串,第1个元素是该匹配字符串
在目标字符串subject中的偏移量。offset:通常,搜索从目标字符串的开始位置开始。可选参数
offset 用于
指定从目标字符串的某个未知开始搜索。返回值:preg_match()返回 pattern
的匹配次数。 它的值将是0次或1次,因为 preg_match()在第一次匹配后
将会停止搜索。
preg_match_all()不同于此,它会一直搜索subject直到到达结尾。
如果发生错误 preg_match()返回 FALSE。示例:复制代码 代码如下:

1.preg_match()

2.preg_match_all — 执行一个全局正则表达式匹配int preg_match_all (
string $pattern , string $subject [, array &$matches [, int $flags =
PREG_PATTERN_ORDER [, int $offset = 0 ]]]
)搜索subject中所有匹配pattern给定正则表达式
的匹配结果并且将它们以flag指定顺序输出到matches中. 在第一个匹配找到后,
子序列继续从最后一次匹配位置搜索.pattern:要搜索的模式,字符串形式。subject
:输入字符串。 matches:多维数组,作为输出参数输出所有匹配结果,
数组排序通过flags指定。flags:可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和PREG_SET_ORDER),如果没有给定排序标记,假定设置为PREG_PATTERN_ORDER:PREG_PATTERN_ORDER:结果排序为$matches[0]保存完整模式的所有匹配,
$matches[1]保存第一个子组的所有匹配,以此类推。PREG_SET_ORDER:结果排序为$matches[0]包含第一次匹配得到的所有匹配,
$matches[1]是包含第二次匹配到的所有匹配的数组,以此类推。PREG_OFFSET_CAPTURE:如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的偏移量。
注意这会改变matches中的每一个匹配结果字符串元素,使其
成为一个第0个元素为 匹配结果字符串,第1个元素为
匹配结果字符串在subject中的偏移量。返回值:返回完整匹配次数,或者如果发生错误返回FALSE。示例:复制代码 代码如下:

函数原型:int preg_match (string $pattern, string $content [, array
$matches]) preg_match
()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其
中。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只
作一次匹配,最终返回0或1的匹配结果数。代码6.1给出preg_match()函数的一段代码示例。
代码6.1 日期时间的匹配 代码如下:

3.preg_split — 通过一个正则表达式分隔字符串array preg_split ( string
$pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]]
)通过一个正则表达式分隔给定字符串.
pattern:用于搜索的模式,字符串形式。subject:输入字符串
limit:如果指定,将限制分隔得到的子串最多只有limit个,返回的最后一个
子串将包含所有剩余部分。limit值为-1, 0或null时都代表”不限制”,
作为php的标准,你可以使用null跳过对flags的设置。flags:flags
可以是任何下面标记的组合:PREG_SPLIT_NO_EMPTY:如果这个标记被设置,
preg_split() 将进返回分隔后的非空部分。
PREG_SPLIT_DELIM_CAPTURE:如果这个标记设置了,用于分隔的模式中的括号表达式将被捕获并返回。
PREG_SPLIT_OFFSET_CAPTURE:如果这个标记被设置,
对于每一个出现的匹配返回时将会附加字符串偏移量.
注意:这将会改变返回数组中的每一个元素,
使其每个元素成为一个由第0个元素为分隔后的子串,第1个元素为该子串在subject中的偏移量组成的数组。返回值:返回一个使用
pattern 边界分隔 subject 后得到 的子串组成的数组。示例:复制代码 代码如下:

这是一个简单动态文本串匹配实例。假设当前系统时间是“2006年8月17日13点25分”,将输出如下的内容。
匹配的时间是:2006-08-17 01:25 pm 当前日期是:2006-08-17
当前时间是:01:25 pm

In my point, [1] => is the web scripting language of choice. I love
[2] => ) */$matches = array();print_r(preg_split(“/php/i”, “In
my point, PHP is the web scripting language of choice. I love
php”));echo “
“.”\n”;/**将会输出:*Array ( [0] => In my point, [1] => is
the web scripting language of choice. I love php ) */$matches =
array();print_r(preg_split(“/php/i”, “In my point, PHP is the web
scripting language of choice. I love php”, 2));echo “
“.”\n”;/**将会输出:*Array ( [0] => In my point, [1] => is
the web scripting language of choice. I love ) */$matches =
array();print_r(preg_split(“/php/i”, “In my point, PHP is the web
scripting language of choice. I love php”, -1,
PREG_SPLIT_NO_EMPTY));echo “
“.”\n”;?> 4.preg_quote — 转义正则表达式字符 string preg_quote
( string $str [, string $delimiter = NULL ] )preg_quote()需要参数 str
并向其中 每个正则表达式语法中的字符前增加一个反斜线。
这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候。
正则表达式特殊字符有: . \ + * ? [ ^ ] $ { } = ! < > | : –
str:输入字符串delimiter:如果指定了可选参数
delimiter,它也会被转义。这通常用于 转义PCRE函数使用的分隔符。
/是最通用的分隔符。返回值:返回转义后的字符串。 示例:复制代码 代码如下:

2.ereg

” . $word . “”, $textbody);//将会输出This book is \very** difficult
to find. echo htmlspecialchars;?> 5.preg_grep —
返回匹配模式的数组条目
array preg_grep ( string $pattern , array
$input [, int $flags = 0 ]
)返回给定数组input中与模式pattern匹配的元素组成的数组.
pattern:要搜索的模式, 字符串形式. input:输入数组.
flags:如果设置为PREG_GREP_INVERT, 这个函数返回输入数组中与
给定模式pattern不匹配的元素组成的数组.返回值:返回使用input中key做索引的数组.示例:复制代码 代码如下:

ereg()是POSIX扩展库中正则表达式的匹配函数。eregi函数的忽略大小写的版
本。二者与preg_match的功能类似,但函数返回的是一个布尔值,表明匹配成功与否。需要说明的是,POSIX扩展库函数的第一个参数接受的是正则
表达式字符串,即不需要使用分界符。例如,代码6.2是一个关于文件名安全检验的方法。
代码6.2 文件名的安全检验 代码如下:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图