正则表达式的零宽向前、向后匹配
2017-04-06 23:49
295 查看
正则中向前匹配和向后匹配非常强大好用。
这里的向前意思是文本的右边,向后是文本的左边(正则引擎匹配按照左->右)。
向前和向后匹配是非获取匹配,即匹配结果不包括这个内容。匹配过程中不消耗字符,不占字符。
来来,举个栗子。
一些代码示例:
这里的向前意思是文本的右边,向后是文本的左边(正则引擎匹配按照左->右)。
向前和向后匹配是非获取匹配,即匹配结果不包括这个内容。匹配过程中不消耗字符,不占字符。
来来,举个栗子。
<?php $a = '2abc3abc'; // 匹配右边是abc的2 $re1 = preg_match('/2(?=abc)/', $a, $match); // 匹配的是2,没有abc var_dump($match);// array(1) { [0]=> string(1) "2" }
<?php $a = '2abc3abc'; $re = preg_match('/2(?=abc)3/', $a, $match); // 匹配失败 因为零宽匹配是不消耗字符 var_dump($re);// int(0) // 这样才能匹配上 注意不消耗字符的含义 // $re = preg_match('/2(?=abc)abc3/', $a, $match); //var_dump($re);// int(1)
一些代码示例:
// 向右匹配 // (?=) 匹配 // (?!) 不匹配 $str = "abcx1 abcy2 abcz3"; // 匹配右边是y的abc $a = preg_replace('/abc(?=y)/', '0', $str);// abcx1 0y2 abcz3 // 匹配右边不是y的abc $b = preg_replace('/abc(?!y)/', '1', $str);// 1x1 abcy2 1z3 // =================================== // 向左匹配 注意有小于号 // (?<=) 匹配 // (?<!) 不匹配 $str = "1xabc 2abc 3zabc"; // 匹配左边一个字符是数字的abc $a = preg_replace('/(?<=\d)abc/', '0', $str);// 1xabc 20 3zabc // 匹配左边一个字符不是数字的abc $b = preg_replace('/(?<!\d)abc/', '1', $str);// 1x1 2abc 3z1 // =================================== // 同时向前向后匹配 $str = 'XXX13188887777YYY123ZZZ';// 找到一个1开头的11位数字,并且前后都不是数字的,在数字前加一个 mobile: // $1是刨除掉向前匹配的括号 注意 $re = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $str);// XXX mobile:13188887777 YYY123ZZZ
相关文章推荐
- 正则表达式中的的向前匹配、向后匹配、负向前匹配、负向后匹配写法
- 正则表达式中的向前匹配、向后匹配、负向前匹配、负向后匹配
- 正则表达式向前查找和向后查找
- 正则表达式学习笔记(6)向前查找和向后查找
- 正则表达式 零宽断言 负向零宽断言 平衡组/递归匹配
- C#正则表达式(3):注释,分组,向后引用,零宽断言,贪婪
- 正则表达式匹配不包含特殊子串的字符串(零宽断言的使用)
- 正则表达式(二) - 零宽断言与懒惰匹配以及平衡组
- php学习第四章:正则表达式(四)匹配规则:分组、环视(零宽断言和负向零宽断言)
- 正则表达式,向前零宽断言(向前查找)
- 正则表达式-- 零宽断言与懒惰匹配以及平衡组
- 带?和*的正则表达式的匹配
- 正则表达式匹配中文字符,Ctrl+F的福音!
- 正则表达式匹配标点符号
- php 正则表达式匹配(输出是否匹配以及匹配值) preg_match
- php 正则表达式的基本语法及匹配
- java正则表达式详解(匹配、切割和替换)
- 正则表达式匹配整数和小数
- .net里匹配汉字的正则表达式
- 面试题31:字符串正则表达式的递归匹配