正则表达式匹配字符串后跟任何内容或以非数字字符结尾的字符串

Posted

技术标签:

【中文标题】正则表达式匹配字符串后跟任何内容或以非数字字符结尾的字符串【英文标题】:Regex match string followed by nothing or a string ending with a non-digit character 【发布时间】:2021-09-10 22:31:39 【问题描述】:

我需要一个匹配给定字符串的模式,或者如果字符串有前缀,它至少后面必须跟一个非数字字符。例如,给定“0.3.5”:

0.3.5, matches
v0.3.5, matches
2021-version0.3.5, matches
10.3.5, does not match
v00.3.5, does not match
v0.3.5-M1, does not match

我试过(.*[^\d]|)0.3.5,但它也匹配“10.3.5”。如何编写正则表达式模式?

【问题讨论】:

【参考方案1】:

Rust 特定

根据下面的评论,如果环顾四周不可用,请使用此替代方法:

^(?:.*\D)?0\.3\.5[^\s\d]*(?:\s|$)

RegEx Demo 1

原解决方案

你可以使用这个正则表达式:

(?<!\d)0\.3\.5(?!\S*\d)

RegEx Demo 2

正则表达式详细信息

(?&lt;!\d): 否定后向断言我们在当前位置之前没有数字 0\.3\.5:匹配0.3.5 (?!\S*\d):负前瞻断言我们在当前位置前面的 0 个或多个非空白字符之后没有另一个数字

【讨论】:

我正在用 Rust 编码。我使用的箱子不支持前瞻和环顾regex 好的试试这个:^(?:.*\D)?0\.3\.5[^\s\d]*\s*$ 是的,一旦我在我的代码中针对所有模式进行了测试,我就会接受它。谢谢。 @anubhava

以上是关于正则表达式匹配字符串后跟任何内容或以非数字字符结尾的字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则匹配以什么开头以什么结尾,以非什么开头,以非什么结尾

编写将过滤输入的用户名的正则表达式

匹配字符串后跟另一个字符串

Java semver 正则表达式中的未封闭字符类

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

初始正则表达式