如何为以下场景编写正则表达式模式

时间:2012-08-24 10:41:29

标签: java regex

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

7 个答案:

答案 0 :(得分:2)

尝试:

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

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

答案 1 :(得分:1)

试试这个正则表达式:

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

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

在此处查看:http://regexr.com?31ubc

如果有人可以帮助我改善它,以及如何制作它,我将不胜感激 匹配1.5.6

答案 2 :(得分:1)

要求

如果你能够形成你想要的东西:

  1. 格式为1.51.5.61.5.6.71.5.6.7.8等的任何内容均为默认有效版本号(数字可以是一个或多个数字,如{{1} })。
  2. 版本号12.60.70只有格式1.5后才能跟一个点(.)。
  3. 版本号1.5.6前面没有1.5之类的点(.)。
  4. 解决方案

    然后,我可以建议你这个正则表达式:

    .1.5

    查看in action,包括所有阳性样本,并排除您提供的所有阴性样本。

    如何使用

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

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

    注意:这仅适用于Java 7+,因为旧版本不支持预测。

答案 3 :(得分:1)

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

检查一下......

它将匹配表单

的字符串

number.number.number.number

没有跟随或前面有一个点

答案 4 :(得分:0)

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

答案 5 :(得分:0)

使用正则表达式:

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

这将使你的一天:)

答案 6 :(得分:-1)

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

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

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