码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2021-01-29 12:19:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:txt   inter   ext   表示   pod   一起   区分   ace   --   

正则表达式

使用方法:

①:描述我们要找的字符串的规律

②:调用函数,执行该正则表达式

PHP:

//把字符串haha找出来
$str="haha,this is my blog"
preg_match_all(‘/haha/‘,$str,$res);
print_r($res);

在PHP里正则必须以/开始,以/结束。

正则表达式必须想明白:找谁?怎么找?找几个

字符边界:开始和结束的范围:

^匹配字符串的开始
$匹配字符串的结束
\b匹配单词的开始和结尾
\B匹配单词的非边界

字符集合[abced],[0123456]里面任意条件符合找出来

字符补集 [ ^abc]不在abc里,符合里面任意条件的不要

字符范围[a-z0-9],必须是连续的,不可以是a-Z

常用字符簇

 

代表
.点 任意字符,不含换行
\w [a-zA-Z0-9]
\W \w的补集
\s 空白符,包括\n,\r,\t\v等
\S 非空白符
\d [0-9]
\D 非数字

单词匹配:

<?php
$str="haha ,this is some history book!";
$patt=/\bis\b/;//以\b开头和以\b结尾,表示陪陪的是单词
preg_match_all($patt,$str,$res);//把匹配到的单词都放到数组res里
print_r($res);
?
?>

集合与补集:

/*给定一组手机号,由[0123456789]组成的,找[01235689],找11个找整个字符串*/
<?php
$arr=array(‘1380013800‘,‘13487656887‘,‘434456‘,‘45454353435425‘);
$patt=‘/^[01235689]{11}$/‘;
/*
或者使用补集
$patt=‘/^[^47]{11}$/‘;
*/
foreach($arr as $v)
{
    preg_match_all($patt,$v,$res);
    print_r($res);
}
?>

字符范围:

<?
$str="020,b2b,b2c,p2p,hello,word,that";
$patt=‘/\b[a-zA-Z]{1,}\b/‘
//$patt=‘/\b[a-zA-Z]+\b/‘         
//{1,}的简称就是+
preg_math_all($patt,$str,$res);
print_r($res);
?>

字符簇

提取单词:

<?
$str=tomorrow is another fighting worth day;
$patt=/\W{1,}/;
print_r(preg_split(($patt,$str));
?>

去除多余空格:

<?
$str=tomorrow is another fighting worth day;
$patt="/\s{1,}/";
echo preg_replace($patt, $str);
?>

找几个

*匹配前面子表达式零次或多次

+匹配前面子表达式一次或多次

?匹配前面子表达式零次或一次

{n}表示匹配n次

{n,}表示至少匹配n次

{n,m}表示匹配n到m次

找出5个字母组成的单词

<?php
$str="hahaha woshi maibaode xiaohuajia";
$patt=/\b\{a-zA-Z}{5}\b///$patt=‘/\b\{a-zA-Z}{3,5}\b/‘;
//$patt=‘/\b\{a-zA-Z}{5,}\b/‘;
preg_match_all($patt,$str,$res);
print_s($res);
?>

去除多余的o

<?
$str="gooood,goooood,gooooooood";
$patt="/go+d/";
print_r(preg_replace($patt,god.$str));
?>

正则中的或者:

//纯英文或者纯数字的,缠在一起的不啊哟
<?php
$str="hello o2o 2b9 250";
$patt="/\b[a-zA-Z]+\b|\b[0-9]+\b/";
?>

匹配苹果的品牌:

<?php
$str="ipad,iphone,imac,ipod,iamdhnt,ieju,thinkphp";
$patt="/\bi(pad|phone|mac|pod)\b/";
preg_match_all($patt,$str,$res);
print_s($res);
?>

贪婪模式:

<?php
$str=ksda good goooood good kl s ja dfs dk;
$patt=/\bg.+d$\b/;
preg_replace($patt,$str,$res)`;
print_s($res);
?>
//贪婪模式是尽量往后匹配
//默认贪婪模式的话,得到的是:good gooood goood kl s ja d

非贪婪模式

<?php
$str=ksda good goooood good kl s ja dfs dk;
$patt=/\bg.+?d$\b/;
preg_replace($patt,$str,$res)`;
print_s($res);
?>
匹配的是good,gooood,good

采集手机号:

<?php
$str="$str="十八哥,要卖肾,联系方式:13838384384,备用电话:15615612110,QQ:673274456,
email:yanshiba@itbool.com" ;
$patt=/\b1[356789]\d{9}\b/;
preg_match_all($patt,$str,$res);
print_s($res);
?>

后向引用:括号括起来就可以引用了。

<?php
$str="txt,hello,high,bom,mun,aifjajla,bhakfjdab,ackjjdaic";
$patt="/\b([a-z])\w+\1\b/";//在后向引用里加括号是可以用的,引用第一个括号
preg_match_all($patt,$str,$res);
print_S($res);
?>

 

后向引用手机中间四位屏蔽

<?php
$str="18100638554,13255874455,13854548565";
$patt="/(\d{3})(\d{4})(\d{4})/";
echo preg_replace($patt,‘\1****\3‘,$str);
?>

模式:

模式修饰符在一定程度上影响正则的解析行为

/i,代表正则不区分大小写比如/[a-zA-z]+/----->/[a-z]+/i

/s,单行模式,表示把整个文件看成一个回车

预查:

file_get_contents();把整个文件读入到字符串中

file_put_contents();把整个字符串写入文件中



正则表达式

标签:txt   inter   ext   表示   pod   一起   区分   ace   --   

原文地址:https://www.cnblogs.com/Tianwenfeigong/p/14343087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!