正则表达式非贪婪模式和取反字符类的使用区别

有这么一个字符串:

<a href="#">one</a><a href="#">two</a>

我想匹配出 <a href="#">two</a>

于是我就写了

preg_match_all('/<a.*?>two<\/a>/',$str,$m);

得到的结果$m是

array(
  0=>'<a href="#">one</a><a href="#">two</a>'
)

我就纳闷了,.*? 不是指定了非贪婪模式吗?按我以前的理解就是 .* 不会包含 ? 后面的 > 字符,等效[^>]* 今天我才知道我错了。。

这里贪婪模式并不是排除问号后面的字符,理论上的意思是尽可能少的重复,什么意思呢?再举个例子:

<a href="#">one</a><a href="#">two</a><a href="#">two</a>

这时候再用同样的正则去匹配会得到

array(
  0=>'<a href="#">one</a><a href="#">two</a>',1=>'<a href="#">two</a>'
)

其中的区别,无法用语言表达,心领神会吧。

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...