正则表达式匹配可选的数字字符串

时间:2011-03-15 13:45:46

标签: regex

我正在尝试构建一个正则表达式来匹配像

这样的字符串

示例:

3232asdfADFF/ew323fdffADF 4243dsafAFDF 232 (total 42)
<----p1---->/<---p2-----> <----p3----> P4            

我可以成功匹配到p3但无法匹配最后一部分,p4 p4本质上是数字字符串,长度为0到3(绝对或最大3)。

我正在使用:

[0-9A-Za-z]{2,12}/[0-9A-Za-z]{3,12} [0-9A-Za-z]{0,12}\\b \\d{0,3}$

但我面临的问题是,如果我从输入中完全删除p4,它就会失败。 即使数字也能成功。

3 个答案:

答案 0 :(得分:1)

这应该适合你,我想:

[0-9A-Za-z]{2,12}/[0-9A-Za-z]{3,12}(?: [0-9A-Za-z]{1,12})?(?: \\d{1,3})?$

答案 1 :(得分:0)

当然,如果没有空间,它就会失败。你应该有类似( \d{0,3})?$的东西。

答案 2 :(得分:0)

正如我在评论中提到的,不确定模式中可能存在/可能不存在的内容。但是,最好的猜测努力,这就是我想出的:

\w{3,12}\/\w{3,12} (?:\w{0,12} )?\d{0,3}

这将匹配(total 42)之前的所有内容。如果您还需要包含它,可以添加:

(?: \(\w+ \d+\))?

到模式的结尾。再一次,尽力而为基于我所看到的和我猜的应该是结果。如果这不是你想要的,请给我留言,我可以调整它。

(另外,为了篇幅起见,我将[0-9a-zA-Z]替换为\w。虽然它不是直接的一对一替换,但它很接近。如果你需要它明确地使用上一个模式,将\w替换回原始类。)