首页 > 解决方案 > 用于匹配最后一行的正则表达式

问题描述

我正在配置一个正则表达式(因此切换到此要求的原始代码并不容易),以获取最后一行输入,如果我使用/.*$/它对于某些输入(例如 js )会变得非常慢'1'.repeat(1e6)+'\n2'。有没有快速获取最后一行的方法?

另外,如果使用 RegEx 作为匹配配置不是一个好主意,有更好的建议吗?

标签: regexperformanceregex-lookaroundsregex-greedy

解决方案


用于查找大输入字符串的最后一行的优化表达式将是引入显式边界的表达式:

(?m)^.*\z

在像 PHP 这样的语言中,它会被写成/^.*\z/m( /s 是分隔符并且m是多行标志)。如果不匹配,插入符号^会使引擎不通过(邪恶的)正则表达式。.*所以我们定义了一个众所周知的边界,不仅可以让我们识别所需的部分,还可以用于引擎及其内置优化。

此正则表达式的性能取决于输入字符串的行数。所以像你这样的输入字符串根本不是问题,但这样的事情引起一些注意。

在这两种情况下,它都执行得很快并且不会失败。


推荐阅读