比较实用的正则表达式学习笔记

90后李越

90后李越

2016-02-19 11:03

下面图老师小编要向大家介绍下比较实用的正则表达式学习笔记,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!
//匹配文本,这个偶尔比较好用,但是要小心字符中包含E
$str = '[a-z]';
$str = preg_replace('/G[a-z]E/', '', $str);
echo $str; //打印空,全被替换掉了,相关大概就是preg_quote功能

//给匹配结果命名,这样在匹配结果中就可以用这个名称来获取值
$str = 'abc123abc';
preg_match('/(?Pnumd+)/', $str, $arr);
echo $arr['num']; //相当于echo $arr[1]

//仅用于分组的括号,匹配内容不会被变量捕获,有时候需要这样提高执行效率
$str = 'abc123abc';
preg_match('/abc(?:d+)/', $str, $arr);
echo $arr[1]; //除了$arr[0]外没有$arr[1]了,不会赋予1

//插入的好帮手,向前、向后锚点搜索位置,每3位添加一个逗号
$str = 'fdfad123456789fdfd';
$str = preg_replace('/(?=d)(?=(d{3})+(?!d))/', ',', $str);
echo $str; //打印 fdfad123,456,789fdfd

//以最少的结果匹配
$str = 123456;
preg_match('/d+/', $str, $arr);
echo $arr[0]; //是人都知道是123456吧
preg_match('/d+?/', $str, $arr);
echo $arr[0]; //这次是1

//一个比较有用的,可以判断前面的是否有匹配过,比如下边的例子,可以忽略等号右边是否有单引号双引号或者什么都没有
$str = HTML
font size=12/font
font size='13'/font
font size="14"/font
font size="15/font
HTML;
preg_match_all('/fonts+size=(['"]?)(d+)1[^]*/', $str, $arr);
print_r($arr);
/*
Array
(
    [0] = 12
    [1] = 13
    [2] = 14
)
*/

//部分模式修饰符,模式修饰符也可以放在表达式中的
//这里匹配符合XHTML规范的style里的颜色值,大写的STYLE被忽略了,但是里面的color可以大小写无所谓
$str = 'b style="COLOR:red"/bb STYLE="color:blue"/bb style="color:green"/b';
preg_match_all('/style=(['"]?)(?i)color:(w+)1(?-i)/', $str, $arr);
print_r($arr[2])

//也可以把匹配内容放到里面,用:隔开,就不用写结束(?-i)
//preg_match_all('/style=(['"]?)(?i:color:(w+))1/', $str, $arr);
//再看一例子
$str = 'BStyle/B';
preg_match('/B(?i:style)/B/', $str, $arr);
print_r($arr); //可以匹配到
$str = 'BStyle/b';
preg_match('/B(?i:style)/B/', $str, $arr);
print_r($arr); //什么都没匹配到

//单词检索,可惜只能用在英文
$str = 'I'm a teacher';
preg_match_all('/b[a-z]+b/i', $str, $arr);
print_r($arr)

//u修饰符,按unicode匹配
$str = '你您';
$str = preg_replace('/[你您]/', 'you', $str);
echo $str; //被拆开了,打印4次you

//看下面加上u修饰符后的效果,该修饰符需要编码utf-8否则会报错
//我的文本都是gb2312,所以要转成utf-8
$str = iconv('gb2312', 'utf-8', '你您');
$regex = iconv('gb2312', 'utf-8', '/[你您]/u');
$str = preg_replace($regex, 'you', $str);
echo $str; //打印2次you

//x模式修饰符,可以忽略空白和加注释
$str = 'test Test';
preg_match('/test  #只匹配小写的test/x', $str, $arr);
print_r($arr);

//排除环视(?!...) (?!...)、忽略优先 *? +? ?? 的复合使用
$str = 'test Btest1B test2/B';
preg_match('/B(?:.(?!B))*/B/i', $str, $arr);
//或者 preg_match('/B(?:(?!B).)*/B/i', $str, $arr);
print_r($arr)

//当时这样写应付不了 $str = 'test Btest1B test2/B test3/B';
//改写一下正则既可 preg_match_all('/B(?:(?!/?B).)*/B/i', $str, $arr);
//根据上面来完成一个最简单的UBB替换
$str = 'test [b]test1[b] test2[/b] test3[/b]test';
$str = preg_replace('/[B]((?:(?![/?B]).)*)[/B]/i', 'b1/b', $str);
$str = preg_replace('/[B]((?:(?![/?B]).)*)[/B]/i', 'b1/b', $str);
print_r($str)

//如果已经确认回朔并不会有匹配结果,可以使用固化分组来放弃备用状态提高效率
$str = 'Subject';
preg_match('/(w+):/', $str, $arr);

//用以下方法代替
//在第一组匹配规则匹配到文本末尾t时匹配结束,启用第二组匹配规则:并不会找到结果,所以这个时候回朔查找,但是w不会包含:,所以可以直接放弃,
preg_match('/(?w+):/', $str, $arr);
展开更多 50%)
分享

猜你喜欢

比较实用的正则表达式学习笔记

Web开发
比较实用的正则表达式学习笔记

常用正则表达式 比较实用

Web开发
常用正则表达式 比较实用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

php 正则表达式学习笔记

Web开发
php 正则表达式学习笔记

正则表达式口诀 正则表达式学习工具

Web开发
正则表达式口诀 正则表达式学习工具

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

又一篇正则表达式学习笔记

Web开发
又一篇正则表达式学习笔记

正则表达式

Web开发
正则表达式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

c语言10个经典小程序

c语言10个经典小程序

excel宏怎么设置

excel宏怎么设置
下拉加载更多内容 ↓