一.正则表达式的组成

1.分隔符,可以是除了字母,数字,反斜线及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~

2.表达式:由一些特殊字符和非特殊字符组成.

3.修饰符:用于开启或关闭某种功能/模式

二.元字符

常用的元字符有以下几种

.    匹配除换行符外任何字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意空白字符
\d 匹配数字
\b 匹配单词开始或结束
^ 匹配字符串开始
$ 匹配字符串结束
- 表示范围
[] 匹配括号中任意一个字符
* + ? 量词 三.字符组 如果匹配没有预定义的元字符,可以使用字符组;只需要在[]内列出他们;

[aoeiou]匹配任何一个英文元音字母;
[.?!] 匹配标点符号 . ? ! ps:尽管[]号内有好多字符,但他只匹配单个字符 四.转义 如果要匹配元字符本身,比如?,直接匹配,会被当成元字符处理,这时候要使用转义;
\? 如:
\? 就可匹配字符串中含有?的字符串 ps:字符组中的元字符不需要转义 五.反义 \W 匹配除字母或数字或下划线或汉字以外
\S 匹配除任意空白字符以外
\D 匹配除数字以外
\B 匹配不是单词开始或结束的位置 字符组的反义是加^
[^abc] 匹配除了abc这几个字母以外的任意字符 ps:反义的特征是和一些已知元字符相反,并且为大写形式.字符组例外 六.分支 | 表示分支 分支就是存在多种可能的匹配情况;如要匹配cat,hat,fat,toat,就可以用分支形式
(c|h|f|to)at ps:匹配分支条件时,从左到右测试每个条件,如果满足某个分支,就不再考虑其他条件. 七.分组 重复单个字符需要限定符即可做到,重复多个字符就需要分组;分组用小括号指定表达式,然后规定这个表达式重复的次数. 1.捕获
(exp) 匹配exp,并捕获文本到自动命名组里
(?<name>exp) 匹配exp,并捕获文本到name组里
(?:exp) 匹配exp,不捕获,也不分配组号 示例1:
<?php
$str = 'cat';
preg_match_all('/(c).*/', $str, $arr);
var_dump($arr); 输出(自动命名组):
array(2) {
[0]=>
array(1) {
[0]=>
string(3) "cat"
}
[1]=>
array(1) {
[0]=>
string(1) "c"
}
} 示例2:
<?php
$str = 'cat';
preg_match_all('/(?<name>c).*/', $str, $arr);
var_dump($arr); 输出(多出一个test组):
array(3) {
[0]=>
array(1) {
[0]=>
string(3) "cat"
}
["test"]=>
array(1) {
[0]=>
string(1) "c"
}
[1]=>
array(1) {
[0]=>
string(1) "c"
}
} 示例3:
<?php
$str = 'cat';
preg_match_all('/(?:c).*/', $str, $arr);
var_dump($arr); 输出: array(1) {
[0]=>
array(1) {
[0]=>
string(3) "cat"
}
} 2.零宽断言(匹配的是事实,不是内容)
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面跟的不是exp的位置 如:
<?php
$str = 'testecattest';
preg_match_all('/(?=te)/', $str, $arr); 则输出:
array(1) {
[0]=>
array(3) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
}
}
匹配到三处 ps:默认情况下,每个分组拥有一个组号,规则是从左到右,以分组的左括号为标志,第一个出现在分组里的为1,第二个为2,以此类推;分组0为整个表达式. 八.反向引用 反向引用在于重复搜索前面某个分组匹配的文本. 示例:
$str = '[url]1.gif[/url]';
$img = preg_replace('/\[url\](\d+\.gif)\[\/url\]/', '<img src="$1" />', $str);
echo $img; 输出
<img src="1.gif" /> $1匹配了分组(\d+\.gif) 九.环视(零宽断言) 1.顺序肯定环视(?=exp)
断言自身出现位置的后面能匹配表达式exp
示例:
<?php
$str = 'what are you doing testing?';
preg_match_all('/\b\w+(?=ing\b)/', $str, $arr);
var_dump($arr); 匹配do和test 2.逆序肯定环视(?<=exp)
断言自身出现位置的前面能匹配表达式exp
示例:
<?php
$str = 'what are you doing testing?';
preg_match_all('/\b(?=ing)/', $str, $arr);
var_dump($arr); 匹配doing和testing 3.顺序否定环视(?!exp) 4.逆序否定环视(<!exp) 十.常用修饰符/模式
1. i 忽略大小写
示例:
<?php
$str = 'cat test CAT';
preg_match_all('/cat/i', $str, $arr);
var_dump($arr); 不加i修饰符,只匹配cat 2. m 多行模式
仅当表达式中出现^,$至少一个元字符且有换行符\n时,m修饰符才起作用; 如:
$str = 'cat test
cat'; 要提取cat a.不用多行模式
preg_match_all('/cat.*/', $str, $arr); b.用多行模式
preg_match_all('/cat.*$/m', $str, $arr); 3.s 点号统配模式(.号可以匹配换行符)
如:
<?php
$str = 'cat
t
test
cat
f';
preg_match_all('/t.*f/s', $str, $arr);
var_dump($arr); 输出:
array(1) {
[0]=>
array(1) {
[0]=>
string(19) "t
t
test
cat
f"
}
} 4.U 懒惰模式
等效于懒惰匹配 5.D 结尾限制
等效于结尾限定符 6.u 启用pcre中与perl不兼容的功能,模式字符串被当成utf-8

php正则表达式基本的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  4. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  10. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

随机推荐

  1. 洛谷P2564 [SCOI2009]生日礼物

    题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...

  2. javascript jquery document.ready window.onload

    网易 博客 下载LOFTER客户端 注册登录  加关注 凡图的编程之路 2012年7月从一个编程新手的点点滴滴 首页 日志 LOFTER 相册 博友 关于我     日志       关于我 Holy ...

  3. Centos 7 ssh登录速度慢

    在server上/etc/hosts文件中把你本机的ip和hostname加入 hostname ifconifg 在server上/etc/ssh/sshd_config文件中修改或加入UseDNS ...

  4. 灰姑娘的水晶鞋(NOIP模拟赛Round 7)

    [问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...

  5. kvm qemu内幕介绍

    转自:http://blog.csdn.net/wj_j2ee/article/details/7978259目录 1 硬件虚拟化技术背景 2 KVM的内部实现概述 2.1 KVM的抽象对象 2.2 ...

  6. Switch能否用string做参数

    在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型(或其包装类)的常量表达式. 从Java5开始,java中引入了枚举类型,即enum类型. 从J ...

  7. 牛客网 牛客练习赛7 B.购物-STL(priority_queue)

    B.购物 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在遥远的东方,有一家糖果专卖店 这家糖果 ...

  8. POJ 2689.Prime Distance-区间筛素数

    最近改自己的错误代码改到要上天,心累. 这是迄今为止写的最心累的博客. Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  9. uvalive4108(线段树)

    uvalive4108 题意 按顺序给出 n 个矩形,每给出一个矩形,统计它在多长的部分是最高的,并把这个长度称为该矩形的覆盖度,求最后总的覆盖度(每次得到的矩形的覆盖度之和) 分析 线段树.用两个数 ...

  10. phpredis Floating point exception

    发生在高版本的gcc编译后的so用于低版本gcc编译出来的php, 解决方法, 加上参数-Wl,--hash-style=sysv phpize ./configure vi Makefile CC ...