加载中…

加载中...

php正则表达式高级用法

转载 2017-03-03 11:56:14
标签:phpregex

1、贪婪vs非贪婪 greedy

$target = "aaaabcdedfbbbbabcdefaaaabcddeddbbbb"​;

​preg_match_all('/aaaa.*bbbb/', $target, $matches),只会返回一个结果

preg_match_all('/aaaa.*?bbbb/', $target, $matches),会返回两个结果

2、前向断定vs后向断定

前向​

$pattern = '/abcd(?=xxx)/​';

​preg_match($pattern, 'abcdxxx');//true

preg_match($pattern, 'abcdxx');//false

否定断定 $pattern = '/abcd(?!xxx)/​';

​preg_match($pattern, 'abcdxxx');//false

preg_match($pattern, 'abcdxx');//true


后向​

$pattern = '/(?

​preg_match($pattern, 'abcdxxx');//true

preg_match($pattern, 'abcdxx');//true

否定断定 $pattern = '/(?

​preg_match($pattern, 'abcdxxx');//false

preg_match($pattern, 'abcdexx');//true


3、条件if-else

(?(condition)true-pattern|false-pattern)

or    (?(condition)true-pattern),当condition为数字时,表示前面子匹配的返回结果

eg:匹配html标签,?(1)代表子匹配(<)的结果

$pattern = '/^(<)?[a-z]+(?(1)>)$/';

preg_match($pattern, ''); // true

preg_match($pattern, '

preg_match($pattern, 'bar>'); // false

preg_match($pattern, 'hello'); // true

condition同时也为断定

// if it begins with 'q', it must begin with 'qu',else it must begin with 'f'

$pattern = '/^(?(?=q)qu|f)/';

preg_match($pattern, 'quake'); // true

preg_match($pattern, 'qwerty'); // false

preg_match($pattern, 'foo'); // true

preg_match($pattern, 'bar'); // false


4、不要结果的子匹配

preg_match('/(?:H.*) (f.*)(b.*)/', 'Hello foobar', $matches);

echo "f* => " . $matches[1]; // prints 'f* => foo'

echo "b* => " . $matches[2]; // prints 'b* => bar

5、命名子匹配

​preg_match('/(?Pf.*)(?Pb.*)/', 'Hello foobar', $matches);

echo "f* => " . $matches['fstar']; // prints 'f* => foo'

echo "b* => " . $matches['bstar']; // prints 'b* => bar'

6、过滤匹配

​preg_quote

7、现成的过滤函数

​filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)

阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report
相关阅读
加载中,请稍后
zzzzfeng
  • 博客等级:
  • 博客积分:0
  • 博客访问:18,988
  • 关注人气:0
  • 荣誉徽章:

相关博文

新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有