对于分隔符之间匹配文本的常见问题(例如<
and >
),有两种常见模式:
- 使用贪心
*
or +
形式的量词START [^END]* END
, e.g. <[^>]*>
, or
- 使用懒惰的
*?
or +?
形式的量词START .*? END
, e.g. <.*?>
.
是否有特别的理由偏爱其中之一?
一些优点:
[^>]*
:
- 更具表现力。
- 捕获换行符,无论
/s
flag.
- 考虑得更快,因为引擎不必回溯来找到成功的匹配(使用
[^>]
引擎不会做出选择 - 我们只给它一种方法来将模式与字符串进行匹配)。
.*?
- 没有“代码重复”——结束字符只出现一次。
- 如果结束分隔符超过一个字符长,则更简单。 (在这种情况下字符类不起作用)常见的替代方案是
(?:(?!END).)*
。如果 END 分隔符是另一种模式,情况会更糟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)