php正则表达式函数使用2,php中正则表达式

本文目录一览:

PHP正则表达式的使用技巧

PHP正则表达式的定义

用于描述字符排列和匹配模式的一种语法规则 它主要用于字符串的模式分割 匹配 查找及替换操作

PHP中的正则函数

PHP中有两套正则函数 两者功能差不多 分别为

一套是由PCRE(Perl Compatible Regular Expression)库提供的 使用 preg_ 为前缀命名的函数

一套由POSIX(Portable Operating System Interface of Unix )扩展提供的 使用以 ereg_ 为前缀命名的函数 (POSIX的正则函数库 自PHP 以后 就不在推荐使用 从PHP 以后 就将被移除)

由于POSIX正则即将推出历史舞台 并且PCRE和perl的形式差不多 更利于我们在perl和php之间切换 所以这里重点介绍PCRE正则的使用

PCRE正则表达式

PCRE全称为Perl Compatible Regular Expression 意思是Perl兼容正则表达式

在PCRE中 通常将模式表达式(即正则表达式)包含在两个反斜线 / 之间 如 /apple/

正则中重要的几个概念有 元字符 转义 模式单元(重复) 反义 引用和断言 这些概念都可以在文章[ ]中轻松的理解和掌握

常用的元字符(Meta character)

元字符     说明

/A       匹配字符串串首的原子

/Z       匹配字符串串尾的原子

/b       匹配单词的边界     //bis/   匹配头为is的字符串   /is/b/   匹配尾为is的字符串   //bis/b/ 定界

/B       匹配除单词边界之外的任意字符   //Bis/   匹配单词 This 中的 is

/d     匹配一个数字 等价于[ ]

/D     匹配除数字以外任何一个字符 等价于[^ ]

/w     匹配一个英文字母 数字或下划线 等价于[ a zA Z_]

/W     匹配除英文字母 数字和下划线以外任何一个字符 等价于[^ a zA Z_]

/s     匹配一个空白字符 等价于[/f/t/v]

/S     匹配除空白字符以外任何一个字符 等价于[^/f/t/v]

/f     匹配一个换页符等价于 /x c 或 /cL

匹配一个换行符 等价于 /x a 或 /cJ

匹配一个回车符等价于/x d 或 /cM

/t     匹配一个制表符 等价于 /x /或/cl

/v     匹配一个垂直制表符 等价于/x b或/ck

/oNN   匹配一个八进制数字

/xNN   匹配一个十六进制数字

/cC    匹配一个控制字符

模式修正符(Pattern Modifiers)

模式修正符在忽略大小写 匹配多行中使用特别多 掌握了这一个修正符 往往能解决我们遇到的很多问题

i     -可同时匹配大小写字母

M     -将字符串视为多行

S     -将字符串视为单行 换行符做普通字符看待 使 匹配任何字符

X     -模式中的空白忽略不计  

U     -匹配到最近的字符串

e     -将替换的字符串作为表达使用

格式 /apple/i匹配 apple 或 Apple 等 忽略大小写      /i

PCRE的模式单元

// 提取第一位的属性

/^/d{ } ([/W])/d{ }// /d{ }$匹配 / / 等字符串 但上述正则表达式不匹配 / 的格式 这是因为模式 [/W] 的结果 / 已经被存储 下个位置 / 引用时 其匹配模式也是字符 /

当不需要存储匹配结果时使用非存储模式单元 (? )

例如/(?:a|b|c)(D|E|F)// g/ 将匹配 aEEg 在一些正则表达式中 使用非存储模式单元是必要的 否则 需要改变其后引用的顺序 上例还可以写成/(a|b|c)(C|E|F)/ g/

PCRE正则表达式函数

以下为引用的内容

preg_match()和preg_match_all()   preg_quote()   preg_split()   preg_grep()   preg_replace()

函数的具体使用 我们可以通过PHP手册来找到 下面分享一些平时积累的正则表达式

匹配action属性

以下为引用的内容

$str = ;       $match = ;       preg_match_all( //s+action=/ (?!)( *?)/ /s/ $str $match);       print_r($match); 

在正则中使用回调函数

以下为引用的内容

/**      * replace some string by callback function      *      */    function callback_replace() {         $url = ;         $str = ;         $str = preg_replace ( /(?=/saction=/ )(?!)( *?)(?=/ /s)/e search(/$url // ) $str );                  echo $str;     }          function search($url $match){         return $url / $match;     } 

带断言的正则匹配

以下为引用的内容

$match = ;      $str = xxxxxx cn bold font  paragraph text

;      preg_match_all ( /(?=(/w{ })) *(?=/// )/ $str $match );      echo 匹配没有属性的HTML标签中的内容 ;      print_r ( $match ); 

替换HTML源码中的地址

以下为引用的内容

$form_ = preg_replace ( /(?=/saction=/ |/ssrc=/ |/s)(?!|javascript)( *?)(?=/ /s)/e add_url(/$url / // / ) $form_ ); 

lishixinzhi/Article/program/PHP/201311/21027

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

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

preg_match_all函数具体说明大家可以查看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

div

id=”(表达式1)”(表达式2)/div

好,运用如上小括号把须要匹配的区域执行

了划分,接下来就是如何

匹配各个表达式内的内容,我们猜想一个ID可能是字母,数字或下划线,那这就变得基本了,运用中括号就可以实现,如下:

表达式1:[a-zA-Z0-9_]+

(表示匹配大小写字母,数字和下划线)

那如何

匹配表达式2,因为ID的内容可以是任意的字符,但是要留心,不能匹配或字符,因为如果匹配这两个字符将会把后面运用的DIV都匹配出来,因此须要排除这两个字符开始的元素,也就是不匹配以或字符,如下:

表达式2:[^]+

(表示不匹配和字符)

这样,须要匹配的子表达式就实现了,但是还要须要匹配一个

的表达式,要领如下:

表达式:/

‘\”(表达式1)\”‘(表达式2)\/div/

留心其中的双引号”和/须要运用

\转义字符转义,然后把前面两个表达式放进去,

如下:

‘\”([a-z0-9_]+)\”‘/div

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

这样就实现一个匹配每一个DIV元素ID值和内容的正则表达式,然后运用

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\sid=\”([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和内容取出。运用正则表达式最主要还是要知道须要什么,然后跟椐须要执行

匹配,并且思路清晰,并适当的借助preg_match_all函数执行

输出调试,非常方便。

PHP正则表达式基本函数

在PHP正则表达式中需要转义的字符如下

$^*()+={}[]|/: ? “

注意 perl风格中表达式要求以/开始和结尾 如 /food/ 表匹配字符 food

perl修饰符如下

i 完成不区分大小写的搜索

g 查找所有出现(all occurrences 完成全局搜索)

m 将一个字符串视为多行(m就表示多(multiple)) 默认情况下 ^和$字符匹配字符串中的最开始和最末尾 使用m修饰符将使^和$匹配字符串中每行的开始

s 将一个字符串视为一行 忽略其中的所有换行符;它与m修饰符正好相反

x 忽略php正则表达式中的空白和注释

U 第一次匹配后停止 默认情况下 将找到最后一个匹配字符结果 利用这个修饰符可以在第一次匹配后停止 进而形式循环匹配

元字符说明

利用Perl正则表达式还可以做另一件有用的事情 这就是使用各种元字符来搜索匹配 元字符(metacharacter)就是一个前面有反斜线的字母字符 表示某种特殊含义 以下是一些有用的元字符

A 只匹配字符串开头

b 匹配单词边界

B 匹配单词边界之外的任意字符

d 匹配数字字符 它与[ ]相同

D 匹配非数字字符的php正则

s 匹配空白字符

S 匹配非空白字符的php正则

[] 包围一个字符类 字符类包括 [ ] [a z] [a zA Z] 等类似

() 包围一个字符分组或定义一个反引用

$ 匹配行尾

^ 匹配行首

* 匹配前面的子表达式零次或多次 要匹配 * 字符 请使用 *

+ 匹配前面的子表达式一次或多次 要匹配 + 字符 请使用 +

? 匹配前面的子表达式零次或一次 或指明一个非贪婪限定符 ?

匹配除换行之外的任何字符

引出下一个元字符

w 匹配任何只包含下划线和字母数字字符的字符串 它与 [a zA Z _]相同

W 匹配没有下划线和字母数字字符的字符串的php正则

Perl风格函数有

array preg_grep(string pattern array input [ flags])

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

PHP 增加了一个可选参数 flag 它接受一个值 PREG_GREP_INVERT 传递此标志将得到与该模式不匹配的数据元素

int preg_match(string pattern string string [ array matches [ int flags [ int offset]]])

在字符串中搜索模式 如果存在返回TRUE 否则返回FALSE

可选输入参数matches可以包含搜索模式中包含的子模式的各个部分 默认返回 匹配的字符串 当有()子包围时 会在数组后面输出

int preg_match_all(string pattern string string array pattern_array [ int order])

和函数 preg_match一样 不过 preg_match 只搜索一次 而 preg_match_all 会执行循环搜索 返回所有匹配的结果

mixed preg_replace(mixed pattern mixed replacement mixed str [ int limit])

用replacement替换pattern的所有出现 并返回修改后的结果

可选 limit 指定应当发生多少次匹配 不设置limit或设置为 将替换所有出现的情况

lishixinzhi/Article/program/PHP/201311/21050

正则表达式 PHP

{}中不能使用反向引用,至少不能直接使用,有没有其他使用方法不祥(可能性比较小)

建议解决方式:

使用如下正则以及判断

$str=”5aaaaa”;

$ret=preg_match(“/^(\d)(\w)\\2*$/”,$str,$phones);

if($ret==1)

{

if($phones[1]==strlen($phones[0])-1)

{

echo(‘true’);

}

else

{

echo(‘false1’);

}

}

else

{

echo(‘false2’);

}

说明:

先用正则表达式/^(\d)(\w)\\2*$/确定字符串必须为数字开头,第二个为字符,从第二个字符开始重复直到结束

然后进行条件判断,因为$phones[1]中存放了第一个字符,因此比较字符串长度就可以了

===========================================

补充:

如果你的这个字符串需要从某个大的正则表达式中的匹配,那么我建议你用括号把这个字符串匹配到的结果括起来做一个子模式.

例如:

$str=”(5ab3de)(6cde9gh)”;

$ret=preg_match(“/\(((\d)\w*)\)\(((\d)\w*)\)/”,$str,$phones);

print_r($phones);

这样$phones[1]表示字符串,$phones[2]表示字符串长度,然后再做判断.对于杂乱无章的字符串反而简单用\w*就可以了.

原创文章,作者:HBZCR,如若转载,请注明出处:https://www.506064.com/n/331287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HBZCRHBZCR
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python正则表达式search()和match()有什么区别?

    search()和match()都是Python中的正则表达式函数,它们的作用都是在一个字符串中搜索匹配正则表达式的位置,但它们有着不同的使用场景和返回结果。 一、search()…

    编程 2025-04-29

发表回复

登录后才能评论