php正则表达式

正则表达式的作用:分割,查找,匹配,替换字符串

分隔符:正斜线(/)hash符号(#)以及取反符号(~)

通用原子:

\d,十进制的0-9

\D,取反,除了0-9

\w,数字,字母,下划线

\W,取反

\s, 空白符

\S,取反

元字符:

.  :除了换行符任意字符

* :匹配前面的内容出现0次一次或者多次

?  : 匹配前面的内容出现0次或者一次

^ :必须以它开头

$ : 必须以它结尾

+ : 匹配前面的内容出现一次或者多次

{n}: 出现n次

{n,}:大于等于n次

{n,m}:大于等于n,小于等于m次

[]:集合。例如[abc]匹配a或者b或者c

():代表一个整体   //用来后向引用 \\1

[^]:抑扬符代表的是取反 例如:[^abc]代表除了a,b,c其他字符

|:

[-]:代表范围 例如:[0-9]


模式修正符:

i:不区分大小写

m:将字符串进行分割(换行),对每一行进行逐行匹配。多文本模式

s:字符串太多的话会换行,单文本模式

U:取消贪婪模式

x:忽略模式中的空白符

A:必须以这个模式开头

D:修正$对\n 反斜线n/n的忽略

u:utf-8中文匹配

 

后向引用:

$str = '<b>abc</b>';
$pattern = '/<b>(.*)<\/b>/';  //括号引用
$result = preg_replace($pattern,"'\\1'",$str);  //\\1代表第一个括号里面引用的内容
var_dump($result);//abc

贪婪模式

$str = '<b>abc</b><b>bcd</b>';
//$pattern = '/<b>.*?<\/b>/';  //加个?表示取消贪婪模式
$pattern = '/<b>.*<\/b>/U';  //加个U表示取消贪婪模式
preg_match
($pattern,$str,$result);  
var_dump($result);

运行结果:

array(1) {

  [0] =>

  string(10) "<b>abc</b>"

}

正则表达式函数 

1. preg_match()

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

$pattern: 要搜索的模式,字符串形式。

$subject: 输入字符串。

$matches: 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。

返回值

pattern 的匹配次数。 它的值将是 0 次(不匹配)或 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 ]]] )

返回值

返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。

 

3. preg_replace()

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

参数说明:

$pattern: 要搜索的模式,可以是字符串或一个字符串数组。

$replacement: 用于替换的字符串或字符串数组。

$subject: 要搜索替换的目标字符串或字符串数组。

$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

$count: 可选,为替换执行的次数

返回值

如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

例:

 

4. 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的设置。

$count: 可选,可以是任何下面标记的组合(以位或运算 | 组合):

· PREG_SPLIT_NO_EMPTY: 如果这个标记被设置, preg_split() 将进返回分隔后的非空部分。

· PREG_SPLIT_DELIM_CAPTURE: 如果这个标记设置了,用于分隔的模式中的括号表达式将被捕获并返回。

· PREG_SPLIT_OFFSET_CAPTURE: 如果这个标记被设置, 对于每一个出现的匹配返回时将会附加字符串偏移量. 注意:这将会改变返回数组中的每一个元素, 使其每个元素成为一个由第0 个元素为分隔后的子串,第1个元素为该子串在subject 中的偏移量组成的数组。

例:



5. preg_filter()

preg_filter() 等价于 preg_replace() ,但它仅仅返回与目标匹配的结果。

返回值

返回一个使用 pattern 边界分隔 subject 后得到的子串组成的数组。

例:

 


例:匹配中文字符

$str = 'dfsdf中国fds文字fds';
//$pattern = '/[\x{4e00}-\x{9fa5}]+/u'; //utf-8模式
$pattern = '/['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']/'; //gbk模式
preg_match_all
($pattern,$str,$match);
var_dump($match);

例:获取<img标签中src属性中的值>

$str = '<html><body><img alt="test" src="1.jpg" /></body></body></html>';
$parttern = '/<img.*?src="(.*?)".*?\/?>/i';
preg_match($parttern,$str,$match);
//$preg_replace($parttern,'\\2',$str);

var_dump
($match);

运行结果

array(2) {

  [0] =>

  string(30) "<img alt="test" src="1.jpg" />"

  [1] =>

  string(5) "1.jpg"

}

手机号:/1[3578]\d{9}/

邮箱:/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[_a-z0-9-]+(\.[_a-z0-9-]+)*(\.[a-z]{2,})

猜你喜欢

转载自blog.csdn.net/kevlin_V/article/details/80032284
今日推荐