擅长:python、mysql、java
<p>困难的概念,所以我会尽我最大的努力。。。如果有点混乱,有人可以随意编辑和解释</p>
<p>从左到右搜索与模式匹配的表达式。是的,以下所有字符串<code>aaaab</code>、<code>aaab</code>、<code>aab</code>和<code>ab</code>都与您的模式匹配,但是<code>aaaab</code>是从最左边开始的字符串,是返回的字符串</p>
<p>所以在这里,您的非贪婪模式不是很有用。也许这另一个例子可以帮助您更好地理解非贪婪模式的作用:</p>
<pre><code>str_match('xxx aaaab yyy', "a.*?y")
# [,1]
# [1,] "aaaab y"
</code></pre>
<p>这里所有的字符串<code>aaaab y</code>、<code>aaaab yy</code>、<code>aaaab yyy</code>都与模式匹配并从相同的位置开始,但是由于非贪婪模式,第一个字符串被返回</p>
<hr/>
<p>那么,你能做些什么来捕捉最后的<code>ab</code>?使用以下命令:</p>
<pre><code>str_match('xxx aaaab yyy', ".*(a.*b)")
# [,1] [,2]
# [1,] "xxx aaaab" "ab"
</code></pre>
<p>它是如何工作的?通过在前面添加贪婪模式<code>.*</code>,您现在正在强制进程将最后一个可能的<code>a</code>放入捕获的组中</p>