您的位置:首页 > 其它

正则表达式, 贪婪模式

2018-02-28 10:24 375 查看
2018-2-28 10:15:09 星期三

好几年没怎么用过正则了, 正则有一个常见的用法就是非贪婪模式

方法一:

? 在 . + 和 * 之后 表示非贪婪匹配;

*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

这和 ? 本身代表0次或1次的限制有关

.除了换行符外的任意字符(可用修饰符/s使之匹配换行符)
.*匹配0个或多个任意字符
.+匹配1个或多个任意字符
.?匹配0个或1个任意字符
a{2}匹配连续出现的2个a
a{2,3}匹配连续出现的2个或3个a
a{2,}匹配连续出现2个以上的所有a
方法二:

添加模式修饰符: U

举例(PHP):

$a = 'aaaa0123456789';

preg_match('#(\d+)#', $a, $match); print_r($match); //贪婪匹配, 匹配尽可能多的数字
preg_match('#(\d+?)#', $a, $match); print_r($match); //非贪婪匹配, 最多只匹配一个数字
preg_match('#(\d+)#U', $a, $match); print_r($match); //非贪婪匹配, 最多只匹配一个数字


结果:

//第3行匹配结果
Array
(
[0] => 0123456789
[1] => 0123456789
)

//第4行匹配结果
Array
(
[0] => 0
[1] => 0
)

//第5行匹配结果
Array
(
[0] => 0
[1] => 0
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: