如何告诉notepad++正则表达式是不贪婪的


How to tell notepad++ regular expression to be non greedy?

我想在notepad++中测试我的正则表达式,然后让它们在盒子外播放。表达式本身可以工作,但是应该告诉它不要贪心。虽然我知道如何在PHP中做到这一点,但我不知道如何在记事本中做到这一点。

我的表达式:

(#([^']]+))?stop_here'?([^']]+)
我将在PHP中使用u修饰符:

preg_match_all("/(#([^']]+))?stop_here'?([^']]+)/U", $input_string, $result_array);

通过在量词?+*后加一个?,它们变成非贪婪的:

(#([^']]+?))??stop_here'??([^']]+?)

也适用于PCRE PHP函数,如preg_match

正如TwiNight所写的,你必须在每个量词后面加上问号。

请注意,如果您想在让php正则表达式在箱外运行之前测试它们,最好的方法是为php 使用正则表达式测试器(例如:http://www.pagecolumn.com/tool/pregtest.htm或其他)。notepad++在这方面非常有限。

请记住,非贪婪量词很慢(因为regex引擎做了很多回溯)。如果可能的话,你应该尽量避免。您也可以使用更快的所有格量词(但不要使用notepad++)。