【问题标题】:How to tell notepad++ regular expression to be non greedy?如何告诉记事本++正则表达式是非贪婪的?
【发布时间】:2013-05-06 17:29:49
【问题描述】:

我想先在 notepad++ 中测试我的正则表达式,然后再让它们在盒子外播放。表达式本身有效,但应该告诉它是非贪婪的。虽然我知道如何在 PHP 中执行此操作,但我不知道如何在记事本中执行此操作。

我的表情:

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

我会使用 u 修饰符在 PHP 中执行此操作:

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

【问题讨论】:

    标签: php regex notepad++


    【解决方案1】:

    通过在量词?+* 之后添加?,它们变得非贪婪:

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

    Also works in PCRE PHP functions like preg_match

    【讨论】:

      【解决方案2】:

      正如 TwiNight 所写,您必须在每个量词后添加一个问号。

      请注意,如果您想在让它们在盒子外播放之前测试您的 php 正则表达式,最好的方法是使用正则表达式测试器for PHP(例如:http://www.pagecolumn.com/tool/pregtest.htm 或其他)。 Notepad++ 非常有限。

      请记住,非贪婪量词很慢(因为正则表达式引擎会执行许多回溯)。你应该尽可能避免它们。您也可以使用更快的所有格量词(但不能使用 notepad++)。

      【讨论】:

      • 很高兴了解性能,但在这种情况下,它不是实时代码,而是用于在本地预生成一些东西,所以不用担心;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2011-04-27
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多