正则表达式

在线正则:飞一下

我们先看一个案例,然后引申正则表达式的结构

假设匹配的字符:aBaaa
正则表达式:/a{5}/i //是匹配字母a五个,且忽略大小写。

正则表达式的结构:

1、定界符号:常用为/ / ,其他的可以为||、{}、!!
2、原子:如a,最小的一个匹配单位(放在定界符中),在一个正则表达式中,至少要有一个原子。
3、元字符:如{5},元字符不能单独使用的。修饰原子,是用来扩展原子功能的和限定功能的。(写在定界符号内)
4、模式修正符号:如i,修正,对模式(正则)修正用,(写在定界符号外面,写在右边)

一、原子:

1、打印字符和非打印字符

打印字符:(a-z A-Z 0-9 !@#¥%)
非打印字符(比如回车\r、换行\n等)

2、转义字符

一、可以将有意义的字符转成没有意义的原子字符(将有意义变成原子,如$)
二、可以将没有意义的字符转成有意义的原子。t ,\t(tab键)
三、a-z A-Z 0-9 _所以没有意义的字符,加上转义也没有意义。@都是可加可不加

正则表达式中常用的非打印字符

3、自己定义原子表

[13579] 任意一个字符是其中一个就可以被匹配
[^a-zA-Z] -从哪到哪区间范围,^除了列表中的

4、所有的数字,所以的字,所有的空白,所有的字母,特殊字符

  • \d 代表任意一个数字 [0-9]
  • \D 代表任意一个非数字 [^0-9]
  • \w 代表任意一个字 a-z A-Z 0-9 _ [a-zA-Z_]
  • \W 代表任意一个非字 除了a-z A-Z 0-9 之外的所以字符。比如(*&%¥) [^a-zA-Z]
  • \s 代表空白 回车,水平制表,换行,换页,垂直制表 [\r\t\n\f\v]
  • \S 代表非空白 [^\r\t\n\f\v]

5、点(.)能代表所有的

二、元字符

注意:不能再正则表达式中单独使用,用来修饰原子的不能再正则表达式中单独使用,用来修饰原子的

  • *用来修饰其前面的原子可以出现0个1个或多个 (任意次){0,}
  • +用来修饰其前面的原子可以出现1次或多次,不能没有至少要出现一次{1,}
  • ?用来修饰其前面的原子可以出现0次或1次 {0,1}
  • {m} m=3 用来修饰其前面的原子只能出现m次,多一次和少一次都不可以
  • {m,} m=3 用来修饰其前面的原子只能出现大于或等于m次
  • {m,n} {2,5} 用来修饰其前面的原子只能出现个数在n和m之间,包括n和m个
  • | 是或的关系,表示它两边的原子,只要有一个出现就可以,但是,|的优先级是最低的
  • ^ 和\A 表示必须以什么开始,这个必须写正则表达式的最前面
  • \b 单词边界
  • \B 不是单词边界
$str = "this is island";
$reg = "/\bis\b/";  //此时匹配的是中间的is
$reg = "/\bis\B/";  //此时匹配的是island里面的is
$reg = "/\Bis\b/";  //此时匹配的是this里面的is

三、模式修正符号(单个字符)

作用:模式修正符合可以修正正则表达式的解释

我们来看下有哪些修正符号

  • i 不区分大小写(默认是区分大小写的)
  • m 可以视为多行,在使用^ 或者 $ 这两个符号时,每一行满足都可以。(默认视为一行处理)。
  • s 修正正则表达式中的 . 可以匹配换行符号。如果不加s ,.* 是不能匹配到换行符
  • x 修正正则表达式,可以省略空白。
  • U (.,.+)正则表达式比较贪婪,不过这样会有兼容性,php可以支持,但js里面不支持。解决贪婪性的办法。使用.? .+?的组合也可以解决贪婪性。但.*?不能和U一起使用,这相当于负负得正,取消了贪婪模式。

模式修正符的使用注意

1、模式修正符号要写在定界符号外,放在右边

$reg =  "/google/i";

2、模式修正符号,一个字符就是一个功能,可以组合使用

$reg =  "/google/ieU";

根据上面看到的,我们可能有一个疑问。到底".?"和".*?" 中的"?"有什么区别?
1、".?" 中"?" 出现在原子后,代表的是任意一个字符出现0次或1次
2、".*?" 中"?" 出现在元字符后,代表匹配的是任意多个字符,且取消贪婪模式

四、()的作用

第一个作用:必变优先级别


正则表达式优先级
$reg = "/ne|red/";      //匹配的是n 或者 red
$reg = "/(ne|re)d/";    //匹配的是need 或者 red

第二个作用:将小原子,变成大原子

$reg = "/(abc|bcd)/";//表示这一段是abc、bcd二者之一均可,顺序也必须一致

第三个作用:子模式,整个表达式是一个大的模式,小括号中是每个独立的子模式

$str = "<a>hello</a><a>world</a>";
//匹配第一个a标签的内容
$reg = "/<a>(.*)<\/a>/";    //.* 匹配的结果是hello</a><a>world

第四个作用:反向引用

// 例子:要求:日期格式中前面用的是“-”,后面必须为“-”。前面是“/”,后面也必须为“/”。
$str = "2014-12-01";
$reg = "/\d{4}(-|\/)\d{2}\\1\d{2}/";

这里面的\1 就是(-|/)匹配到的值。
注意:
当使用preg_match函数时,只能用\1来引用子模式,而不能使用 ${1}来引用。
preg_replace函数可以用到${1}来引用。

$str = "2014/12-01";
$reg = "/\//";
echo preg_replace($reg,'${1}-',$str);

(?:-|/)如果小括号中加了?: 则表示不作为反向引用来使用,且后面引用不到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355