是否可以使用正则表达式从字符串末尾到开头进行搜索?
例如我有一个字符串:“a2bba2b”
我知道我需要最后一次出现 /a2/ 并且让机器遍历可能很长的整个字符串似乎效率非常低。我知道针将位于字符串(haystack)末尾附近的某个位置,所以我想颠倒顺序,只需告诉脚本从头到尾搜索以节省一些资源。
正则表达式似乎是匹配更复杂字符串的一种方法。而且编写复杂的正则表达式比编写自己的搜索函数更容易。
那么有没有一种方法可能是一个标志或其他东西来反转搜索顺序以从输入字符串的末尾到开头匹配正则表达式。现代语言是否支持类似的东西?如果不是为什么?
不可以,JavaScript RegExp 不允许从字符串末尾开始搜索。通常的解决方法是使用贪婪点匹配模式使引擎抓取整个字符串,然后回溯以找到最后一次出现的位置(如/.*a\d/ https://regex101.com/r/MvuSQl/1),但是如果一个大字符串并不真正包含这个模式,那就会变得很痛苦。
如果目的是extract最后一场比赛,您可能会获得所有比赛并抓住最后一场(s.match(/a\d/g).pop()
(当然,必须有一个空检查))。
有一些正则表达式引擎实际上可以让您从右到左解析字符串。
- .NET 正则表达式使用RegexOptions.RightToLeft修饰语 https://learn.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regexoptions.righttoleft?view=netframework-4.7为此(参见)
- In Python PyPi 正则表达式 https://pypi.python.org/pypi/regex/,您还可以通过
regex.R
(或内联(?r)
版本)强制反向匹配:regex.compile(r'a\d', regex.R).sub(r"**\g<0>**", "a2bba2b", count=1)
==> a2bb**a2**b
) (see RexTester 演示 http://rextester.com/DQGRBE89795).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)