0

任何人都可以给我一些正则表达式模式,这些模式将从一些示例字符串中提取版本号(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."

4

7 回答 7

2

尝试:

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

如果设置标志[vV],则可以省略。vCASE_INSENSITIVE

于 2012-08-24T10:45:46.057 回答
1

试试这个正则表达式:

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

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

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

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

于 2012-08-24T10:56:31.620 回答
1

要求

如果您可以将您想要的内容表述为:

  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+,因为旧版本不支持前瞻。

于 2012-08-24T11:10:28.917 回答
1

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

检查这个...

它将匹配表单的字符串

number.number.number.number

后面没有或前面没有点

于 2012-08-27T06:15:16.003 回答
0

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

于 2012-08-24T11:18:59.403 回答
0

使用正则表达式:

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

这会让你的一天:)

于 2012-08-27T06:48:03.797 回答
-1

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

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

或者,如果您只想要前两位数字 [0-9].[0-9],但这不适用于像 1.5.0.0 这样的字符串,它将捕获 1.5 和 0.0。

于 2012-08-24T10:46:02.280 回答