Rust regex crate声明:
此crate提供了正则表达式的本机实现,它在语法和实现方面都基于RE2。值得注意的是,没有提供反向引用和任意前瞻/后瞻断言。
在撰写本文时,“Rust regex lookbehind”回来了,没有DuckDuckGo的结果。
我以前从未解决过这个问题,但我可以想到两种方法:
.captures()
我希望用作lookbehind的模式。这不仅是一个巨大的痛苦,似乎还有许多边缘案例会让我失望。有没有更好的方法来解决这个问题?
给出一个字符串:
"Fish33-Tiger2Hyena4-"
我想提取["33-", "2", "4-"]
iff,每个人都跟着"Fish"
这样的字符串。
答案 0 :(得分:9)
如果没有一个激励性的例子,很难以一般的方式有效地回答你的问题。在许多情况下,您可以使用两个正则表达式替换环视操作符 - 一个用于搜索候选项,另一个用于生成您感兴趣的实际匹配项。但是,这种方法并不总是可行的。
如果您真的陷入困境,那么您唯一的选择就是使用支持这些功能的正则表达式库。 Rust绑定了其中几个:
还有一个更实验性的库fancy-regex,它建立在regex
箱子之上。
答案 1 :(得分:1)
如果你有一个正则表达式应用程序,你有一个已知的一致模式,你想用作lookbehind,另一个解决方法是使用.splits()
与lookbehind匹配模式作为参数(类似于在the other answer)。这至少会给你一些字符串,表示它们与你想要看到的匹配的邻接关系。
我不知道性能保证正则表达式,但这至少意味着你可以在拆分结果上进行N次扫描(对于N次拆分),或者根据需要对连接结果执行一次无外观的正则表达式匹配