0

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

我的表达:

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

我会使用 u-modifier 在 PHP 中执行此操作:

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

2 回答 2

5

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

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

也适用于 preg_match 等 PCRE PHP 函数

于 2013-05-06T17:38:25.460 回答
2

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

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

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

于 2013-05-06T18:30:52.467 回答