php 正则 菜鸟,php 正则表达式学习笔记

php 正则表达式学习笔记

发布时间:2020-04-07 来源:未知 点击:

复制代码 代码如下:

//匹配文本,这个偶尔比较好用,但是要小心字符中包含\E

$str = '[a-z]';

$str = preg_replace('/\G[a-z]\E/', '', $str);

echo $str; //打印空,全被替换掉了,相关大概就是preg_quote功能

复制内容到剪贴板代码:

//给匹配结果命名,这样在匹配结果中就可以用这个名称来获取值

$str = 'abc123abc';

preg_match('/(?P\d+)/', $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;

preg_match_all('/]*>/', $str, $arr);

print_r($arr);

/*

Array

(

[0] => 12

[1] => 13

[2] => 14

)

*/

//部分模式修饰符,模式修饰符也可以放在表达式中的

//这里匹配符合XHTML规范的style里的颜色值,大写的STYLE被忽略了,但是里面的color可以大小写无所谓

$str = '';

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 = 'Style';

preg_match('/(?i:style)/', $str, $arr);

print_r($arr); //可以匹配到

$str = 'Style';

preg_match('/(?i:style)/', $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 test1 test2';

preg_match('/(?:.(?))*/i', $str, $arr);

//或者 preg_match('/(?:(?!).)*/i', $str, $arr);

print_r($arr)

//当时这样写应付不了 $str = 'test test1 test2 test3';

//改写一下正则既可 preg_match_all('/(?:(?!).)*/i', $str, $arr);

//根据上面来完成一个最简单的UBB替换

$str = 'test [b]test1[b] test2[/b] test3[/b]test';

$str = preg_replace('/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i', '\1', $str);

$str = preg_replace('/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i', '\1', $str);

print_r($str)

//如果已经确认回朔并不会有匹配结果,可以使用固化分组来放弃备用状态提高效率

$str = 'Subject';

preg_match('/(\w+):/', $str, $arr);

//用以下方法代替

//在第一组匹配规则匹配到文本末尾t时匹配结束,启用第二组匹配规则:并不会找到结果,所以这个时候回朔查找,但是\w不会包含:,所以可以直接放弃,

preg_match('/(?>\w+):/', $str, $arr);

这就是微学网-程序员之家为你提供的"php 正则表达式学习笔记"希望对你有所帮助.本文来自网络,转载请注明出处:http://www.weixuecn.cn/article/13238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值