擅长:python、mysql、java
<p>你想要一个简单的真/假匹配结果,还是想要实际捕获匹配的单词</p>
<p>某些正则表达式语言(如PCRE)允许使用(?[Some number])格式的“模式重复”:</p>
<pre><code>(?=(cat|dog).*(?1))
</code></pre>
<p>这将查找<code>cat</code>或<code>dog</code>,然后(由于<code>(?1)</code>)再次查找<code>cat</code>或<code>dog</code><a href="http://regex101.com/r/nD6pO2/1" rel="nofollow">Example 1</a></p>
<p>如果您希望捕获模式(整个内容或单个单词),可以使用以下选项之一:</p>
<pre><code>((cat|dog).*((?2)))
</code></pre>
<p><a href="http://regex101.com/r/nD6pO2/2" rel="nofollow">Example 2</a></p>
<p>或</p>
<pre><code>(?:(cat|dog).*((?1)))
</code></pre>
<p><a href="http://regex101.com/r/nD6pO2/3" rel="nofollow">Example 3</a></p>
<p>示例2捕获了<code>\1</code>引用中的整个组,捕获的单词分别位于<code>\2</code>和<code>\3</code></p>
<p>示例3没有捕获整个组,但是它分别捕获了<code>\1</code>和<code>\2</code>中的单词</p>
<p>其他语言(Javascript、Python)可能会以不同的方式处理此问题,因此您可能无法访问<code>(?1)</code>引用</p>