我有以下正则表达式\b(\w+)$
,用于查找字符串中的最后一个单词。但是,字符串越长,所需的步骤就越多。
如何让它从行尾开始搜索?
答案 0 :(得分:2)
使用您指定的正则表达式\b(\w+)$
,您将获得越来越多的步骤,具体取决于字符串的长度(它将匹配每个\b
,然后是每个\b\w
,然后每个\b\w\w
,直到找到\b\w$
的正确匹配项,但它仍然必须检查字符串中的每个项目,直到它满意为止。
使用regex显式获取字符串的最后一项可以做的是翻转字符串,然后使用^
锚点。这将导致正则表达式在第一次匹配时立即得到满足并停止处理。
您可以搜索如何以多种语言翻转字符串。语言的一些示例包括以下内容:
You can see the regex in use here
您的编程语言
// flip string code goes here
正则表达式
^(\w+)
您的编程语言
// flip regex capture code goes here
This is my string
通过翻译您的语言
的字符串转换为以下内容gnirts ym si sihT
正则表达式返回以下结果
gnirts
用您的语言翻回字符串
string
由于使用了锚^
,它将从字符串的开头进行检查(按照通常的正则表达式行为)。如果满足,则返回匹配,否则返回不匹配。在regex101中进行测试(通过代码部分中的链接提供)表明,确保进行匹配只需要6个步骤。它还需要3个步骤才能确保 no 匹配。这些值不会随字符串长度而变化。
答案 1 :(得分:1)
在大多数正则表达式引擎中,你不能。
正则表达式引擎通过从输入开始消耗输入来工作。
您可以通过从最后一个字符开始的字符上的简单递减循环以编程方式执行此操作。如果您需要更高的性能,使用代码而不是正则表达式是唯一的方法。
答案 2 :(得分:1)
它仅适用于.NET
:
Regex rx = new Regex(Pattern, RegexOptions.RightToLeft);
Match match = rx.Match(Source);
答案 3 :(得分:0)
这可以更快。
6
•之前添加^.*\b(\w+)
并抓取^.*
•尽可能放弃\w+