繁体   English   中英

如何为以下情况编写正则表达式模式

[英]how to write the regular expression patterns for the following scenarios

任何人都可以给我一些正则表达式模式,这些模式将从某些示例字符串中提取版本号(1.5)

    "jdk1.5","jdk-v1.5","jdk-V1.5","jdk V1.5","jdkv1.5","jdk version1.5","1.5.6","v1.5","V1.5","version 1.5","Version 1.5","14.5.4","1.5.4","14.5.4""jdj14.5"

我想将正则表达式模式存储在字符串数组中,并使用上面的字符串检查这些模式。 如果与任何存储的模式都匹配,则输出应为版本号1.5。 我只想从上述字符串中提取版本号(1.5)。

有效的字符串格式:“ jdk1.5”,“ jdk-v1.5”,“ jdk-V1.5”,“ jdk V1.3”,“ jdkv1.4”,“ jdk version1.5”,“ 1.5.6” “,” v1.5“,” V1.5“,”版本1.5“,”版本1.5“,” 14.5.4“,” 1.5.4“,” 14.5.4“” jdj14.5“,” 14.52。 3.42"

无效的字符串格式:“ jdk1..2”,“ jdk.1.2。”,“。1.2”。

尝试:

^(jdk[- ]?)?([vV](ersion)? ?)?\d\.\d(\.\d)?$

如果设置了CASE_INSENSITIVE标志,则可以用v省略[vV]

试试这个正则表达式:

(?<=([\\w\\s]))(\\d)\\.(\\d)(.\\d)?

这将匹配您所有的有效格式,而不匹配任何无效的格式。

看到它在这里工作: http : //regexr.com?31ubc

如果有人可以帮助我做得更好,以及如何使其与1.5.6匹配,我将不胜感激。

要求

如果您可以制定自己想要的形式:

  1. 默认情况下,格式为1.51.5.61.5.6.71.5.6.7.8等的任何内容都是有效的版本号(数字可以是一个或多个数字,如12.60.70 )。
  2. 版本号1.5可以跟随一个点( . )仅当它是格式1.5.6
  3. 版本号1.5绝对不能在.1.5之前加点号( . )。

然后,我可以建议您使用此正则表达式:

(?!\.)(\d+(\.\d+)+)(?![\d\.])

看到它在行动 ,包括所有的阳性样品,不包括你提供的所有阴性样品。

如何使用

第一个捕获组将是您的版本号。 样例代码:

Pattern pattern    = Pattern.compile("(?!\\.)(\\d+(\\.\\d+)+)(?![\\d\\.])");
Matcher matcher    = pattern.matcher(inputStr);
boolean matchFound = matcher.find();

if (matchFound)
{
    String version = matcher.group(1);
    System.out.println("Version number: " + version);
}
else
{
    System.out.println("No match for the input!");
}

注意:这仅适用于Java 7+,因为较早的版本不支持预读。

(?<![\\d.])(\\d+[.])+(\\d+)(?![\\d.])

检查一下...

它将匹配形式的字符串

number.number.number.number

在点之后或之前没有点

对于1.5.6这样的字符串,您可以使用: [0-9](.[0-9])+ http://regexr.com?31ubo

使用正则表达式:

(^([jJ][dD][kK])([\s]*[vV]*\d+.\d+(.\d+)*))$

这会让你开心:)

如果要捕获两个以上的数字,例如“ 1.5.6”或“ 1.5.0”,则可以使用

[0-9](.[0-9])+

或者,如果您只希望前两位数字[0-9].[0-9] ,但不适用于1.5.0.0之类的字符串,它将捕获1.5和0.0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM