PHP常用正则表达式函数学习笔记

正则语法规则

    我们先介绍三个东西,然后可以进行简单的例子了。
一、定界符    "/" 左斜线
php采用左斜线作为定界符,规定规则的边界,成对出现,两个定界符之间的内容就是需要被匹配的规则

二、元字符---出现模式类

匹配方式,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
比如出现一次,出现多于一次,出现多次,没有出现。等等。
常用的有:
    +     1次或多次
    *     0次或1次或多次
    ?    0次或1次
  {2,6}   2-6次
   {2}    恰巧2次
   {3,}   至少3次,>=3

三、元字符---特定字符类

代表一个特定的字符
\s     空白字符(单个空格符、tab键和换行符)
\S     非空白字符
\d     数字(单个 0到9)
\w     字母,数字或下划线字符
\W     非(字母,数字或下划线字符)
 .     除换行符之外的所有字符

1. preg_match()函数

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

preg_match()函数在字符串中搜索模式,如果存在则返回true,否则返回false

 代码如下 复制代码

$pattern='/php/';
$str='111cn.net';
echo preg_match($pattern,$str);

输出结果:1

2. preg_grep()函数

preg_grep()函数搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组

 代码如下 复制代码

$pattern='/p$/';
$strArray=array('asp','php','jsp','python','ruby');
print_r(preg_grep($pattern,$strArray));

输出结果:
 Array
(
 [0] => asp
 [1] => php
 [2] => jsp
)

3. preg_match_all()函数

preg_match_all()函数在字符串中匹配模式的所有出现,然后将所有匹配到的全部放入数组

 代码如下 复制代码

<?php
 
//preg_match("正则表达式","字符串")用于在字符串中查找匹配项
 
$email = "987044391@qq.com";
if (preg_match("/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([.a-zA-Z0-9_-])+([.a-zA-Z0-9_-]+)+([.a-zA-Z0-9_-])$/",$email)){
 echo '匹配成功<hr />';
}else {
 echo '匹配失败<hr />';
}
 
//preg_quote("字符串") 在每个有正则表达式语法前面加入一个转义字符即\
 
$str = "php点点通是一个学习php的网站,(⊙o⊙)…";
echo preg_quote($str);
echo "<hr />";
 
//preg_split("正则","字符串")分割字符串
$php = "+php++点点通++++是好网站";
$field = preg_split("/\+{1,}/",$php);
foreach($field as $f){
 echo $f." ";
}
echo "<hr />";
//preg_grep("正则","字符串") 与数组匹配后返回新数组
$phpddt = array("php点点通","php100","呵呵","hahaha","phpchina");
$item = preg_grep("/^php/",$phpddt);
print_r($item);
 
echo "<hr />";
//preg_replace("正则","替换内容","原字符串")    很重要,很常用
$a = "欢迎光临http://www.111cn.net/";  //给http开头的加上超链接
echo preg_replace("/http:\/\/(.*)\//","<a href=\"\${0}\">\${0}</a>","$a");
 
?>

4. preg_quote()函数

preg_quote()函数在每个对于正则表达式语法而言有特殊含义的字符前插入一个反斜线。

echo preg_quote('苹果的价格是:$5/千克');

输出结果:苹果的价格是:\$5/千克

5. preg_replace()函数

preg_replace()函数搜索到所有的匹配,然后替换成想要的字符串返回

 代码如下 复制代码

$pattern='/php[1-5]/';
$str='php1php2php3php4php5php6php7php8';

echo preg_replace($pattern,'PHP',$str);

输出结果:PHPPHPPHPPHPPHPphp6php7php8

6. preg_split()函数

preg_split()函数以不区分大小写的方式分割字符串,将所得到的字串组成数组并返回

 代码如下 复制代码

$pattern='/[\.@]/';
$str='feng.yingyuan@sina.com.cn';

print_r(preg_split($pattern,$str));

输出结果:
Array
(
 [0] => feng
 [1] => yingyuan
 [2] => sina
 [3] => com
 [4] => cn
)

 

ereg()和eregi()

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

 代码如下 复制代码

<?php
$username = $_SERVER['REMOTE_USER'];
$filename = $_GET['file'];
//对文件名进行过滤,以保证系统安全
if (!ereg('^[^./][^/]*$', $userfile))
{
die('这不是一个非法的文件名!');
}
//对用户名进行过滤
if (!ereg('^[^./][^/]*$', $username))
{
die('这不是一个无效的用户名');
}
//通过安全过滤,拼合文件路径
$thefile = "/home/$username/$filename";
?>

通常情况下,使用与Perl兼容的正则表达式匹配函数perg_match(),将比使用ereg()或eregi()的速度更快。如果只是查找一个字符串中是否包含某个子字符串,建议使用strstr()或strpos()函数

preg_replace()

函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])
preg_replace较ereg_replace的功能更加强大。其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。代码6.7是一个数组替换的应用实例

 代码如下 复制代码

<?php
//字符串
$string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n";
//模式
$patterns =array(
"/{Address}/",
"/{Name}/",
"/{Email}/"
);
//替换字串
$replacements = array (
"No.5, Wilson St., New York, U.S.A",
"Thomas Ching",
"tom@emailaddress.com",
);
//输出模式替换结果
print preg_replace($patterns, $replacements, $string);
?>

时间: 2024-10-03 13:44:44

PHP常用正则表达式函数学习笔记的相关文章

python函数学习笔记

#!/usr/bin/env python #个人学习笔记,无其他用途 def add(x=9,y=10): if x>y: a=x+y print "x+y" return a if x<y: a=y-x print "y-x" return a if x==y: a=x*y print "x*y" return a print add(2,3) print add(5,4) print add(6,6) 将一个数组的值传递给函数

整理Javascript函数学习笔记_javascript技巧

1.什么是函数 如果需要多次使用同一段代码,可以把它们封装成一个函数.函数(function)就是一组允许在你的代码里随时调用的语句.每个函数实际上是一个短小的脚本. 如:要完成多组数和的功能. var sum; sum = 3+2; alear(sum); sum = 7+8; alear(sum); ......//不停的重复两行代码 如果要实现8组数的和,就需要16行代码,实现的越多,代码行也就越多.所以我们可以把完成特定功能的代码块放到一个函数里,直接调用这个函数,就省去重复输入大量代码

php文件目录操作函数学习笔记

文件操作函数 1.获取文件名:basename(); 2.获取文件所在的目录:dirname(); 3.pathinfo()获取文件信息,返回结果为一个array,包括路径.文件全名.文件名和扩展名.例如:  代码如下 复制代码 $file = '/com/netingcn/error.log'; print_r(pathinfo($file)); 结果为: Array(     [dirname] => /com/netingcn     [basename] => error.log   

php 数组操作函数学习笔记

对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等.数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小结,借此记之,便于以后鉴之.. 数组定义 数组的定义使用 array()方式定义,可以定义空数组:  代码如下 复制代码 <?php $number = array(1,3,5,7,9); //定义空数组 $result = array(); $color =array("red",&qu

excel中LOOKUP函数学习笔记

LOOKUP(lookup_value.lookup_vector.result_vector) •Lookup_value 是 LOOKUP 在第一个矢量中搜索到的值.Lookup_value 可以是数字.文本.逻辑值,也可以是代表某个值的名称或引用. •Lookup_vector 是一个仅包含一行或一列的区域.lookup_vector 中的值可以是文本.数字或逻辑值. 重要说明: lookup_vector 中的值必须按升序顺序排列.例如,-2.-1.0.1.2 或 A-Z 或 FALSE

PHP 日期函数 学习笔记介绍

举一个简单的date例子   我将使用echo命令把内容输出到我们的客户端(浏览器).我将使用下面的代码做为基础代码.    代码如下 复制代码 <!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8" />     <title>Getting started with dates in php5</title> <

github常用语法之学习笔记

github -- 前端的你值的拥有! 记录下一些常用的标签说明. 1, 标题 以 # 开头, 空格相隔, # 的数量就是标题的级别,如: # 代表h1, ##代码h2 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 效果如图:  2,引用 以 > 开头, 空格相隔, 如: 这是我引用的, > 我是引用的,如果是段落,直接换行,如果下行是非引用,空一个行再写 这是我的时代 > 我是段落引用 1, 2,3 4 效果如图: 3,斜体/粗体 代码: *

php入门教程之字符串函数学习笔记(1/3)

PHP语言是一个功能强大的嵌入式HTML脚本语言,它的易用性让许多程序员选择使用.PHP判断字符串的包含,可以使用PHP的内置函数strstr,strpos,stristr直接进行判断.也可以通过explode函数的作用写一个判断函数. 探讨如何实现PHP判断字符串是否为IP 深入探讨PHP自动获取关键词的具体方法 PHP字符串函数的分类总结 分享PHP函数require()的具体使用技巧 PHP重定向网页的具体实现方法介绍 下面介绍PHP判断字符串的包含的具体使用方法: 1. strstr:

Python中的自定义函数学习笔记_python

定义一个什么都不做的函数 复制代码 代码如下: >>> def a(): ... pass ... >>> def printHello(): ... print("hello") ... >>> printHello() hello >>> callable(printHello) True 顾名思义,callable函数用于判断函数是否可以调用: 有书上说,callable在Python3.0中已经不再使用,而