对于给定的正则表达式匹配,布尔变量值的结果应该是什么?

时间:2014-06-25 13:35:51

标签: java regex

String HouseNo = "a";
boolean value = HouseNo.matches("[0-9]+[/\\-]??[A-Za-z]");

据我所知,价值应该是真实的,但它是假的。任何人都可以解释原因吗?

另外我试过了正则表达式

"[0-9]+[/\\-]??[A-Za-z[0-9]+]"

匹配输入值“99-99”或“99-a”或“99-A”但不匹配“99-”,但结果是假的。有人可以解释一下吗?

编辑:我得到了第一个问题的答案。实际上在java ??相当于?这里给出http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

虽然仍然无法找到第二个问题的答案。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

[0-9]+不是有条件的

修改

根据您的有效/无效输入,以下正则表达式可能对您有用

([0-9]+[/\\-])?([A-Za-z]|[0-9]+)

这基本上有条件地评估了前面的数字加上-/,后面跟着一个字符或一个数字

答案 1 :(得分:1)

关于你的第一个问题: +在正则表达式中意味着:"多次,但至少有一次",这意味着你在模式的其余部分之前需要一个数字。 如果您只想要字母,请使用*代替,即:"零次或多次"。 不确定这是否有意义,如果你想要门牌号码(可能在不同地区/国家的不同系统上有所不同)。

第二个可能有类似的问题......

答案 2 :(得分:0)

[0-9]+”对您来说是一个问题。 +元字符表示“一个或多个”,并且字符串开头的数字为零。