擅长:python、mysql、java
<p>从一个简单的字符串到一个简单的正则表达式(从一个简单的字符串到一个匹配的字符串,从一个简单的字符串开始向左边移动)。在lookaround的情况下,在光标的每一个停止处,lookaround被断言,如果为true,引擎将继续尝试匹配。一旦引擎能匹配你的模式,它就会返回匹配。在</p>
<p>在字符串的位置0(即,<code>Batman</code>中的<code>B</code>之前),断言成功,因为<code>Bat</code>在当前位置之前不存在,因此,<code>\w+</code>可以匹配整个单词{<cd2>}(记住,regex本质上是<em>贪婪的</em>-即,将尽可能匹配)。在</p>
<p>请参阅<a href="http://www.regular-expressions.info/engine.html" rel="nofollow">this page</a>以获取有关引擎内部结构的更多信息。在</p>
<hr/>
<p>为了达到你想要的效果,你可以使用类似于:</p>
<pre><code>\b(?!Bat)\w+
</code></pre>
<p>在此模式中,引擎将匹配<a href="http://www.regular-expressions.info/wordboundaries.html" rel="nofollow">word boundary</a>(<code>\b</code>)<sup>1</sup>,后跟一个或多个单词字符,并声明单词字符不以<code>Bat</code>开头。使用<em>lookahead</em>而不是<em>lookbehind</em>,因为在这里使用lookbehind会有与原始模式相同的问题;它会在单词边界后面的位置之前查找,并且已经确定光标前面的位置是单词边界,消极的回头看总是成功的。在</p>
<p><sup>1</sup>注意单词边界匹配<code>\w</code>和{<cd9>}之间的边界(即<code>[A-Za-z0-9_]</code>和任何其他字符之间;它还匹配<code>^</code>和{<cd12>}<a href="http://www.regular-expressions.info/anchors.html" rel="nofollow">anchors</a>)。如果你的边界需要更复杂,你需要一种不同的方式来锚定你的模式。在</p>