使用正则表达式检查java中的字符串是否有效

时间:2015-06-10 09:07:19

标签: java regex

我有以下要求,只有当给定的字符串以" Y"结尾时才需要做几件事。或"年"或者"年"。

我尝试使用这样的正则表达式。

String text=1.5Y;
if(Pattern.matches("Y$",text) || Pattern.matches("YEARS$",text) || Pattern.matches("Years",text))
{
//do
}

然而这是失败的。

有人可以指出我出错的地方或建议我使用其他任何可行的方法。

编辑:

谢谢。这有帮助。

最后我使用了"(?i)^.*Y(ears)?$| (?i)^.*M(onths)?$".

但我想做出更多改变以使其完美。

我们说我有很多字符串。

理想情况下,如果检查,只能通过1.5Y或0.5-3.5Y或2.5 / 2.5-4.5Y等字符串。

It can be number of years(Ex:2.5y) or the period of years(2.5-3.5y) or the no of years/period of years(Ex.2.5/3.5-4.5Y) nothing more.

More Examples:
--------------
Y -should fail;
MY - should fail;
1.5CY - should fail;
1.5Y-2.5Y should fail;
1.5-2.5Y should pass;
1.5Y/2.5-3.5Y should fail;
1.5/2.5-3.5Y should pass;

6 个答案:

答案 0 :(得分:5)

你在这里不需要正则表达式:

Update

答案 1 :(得分:1)

matches方法尝试匹配完整输入,因此请使用:

^.*Y$

为你的第一个模式。

顺便说一句,你可以在所有3种情况下使用一个正则表达式:

if (text.matches( "(?i)^.*Y(ears)?$" ) ) {...}

(?i)会忽略大小写匹配。

答案 2 :(得分:1)

.*(?:Y|YEARS|Years)$

你可以直接使用这个。匹配从头开始。所以你的失败了。

答案 3 :(得分:1)

您可以简单地使用正则表达式模式:

if (Pattern.matches(".*(Y|YEARS|Years)$",text)) {/*do something*/}

答案 4 :(得分:1)

/((?0)\ d + | 0)(\ d +。)(?:年|一年| Y)/ GI

https://regex101.com/r/gJ6xD2/2

var text = "1.6y   1.5years  1year 1.5h";
text.match(/((?!0)\d+|0)(\.\d+)?(?:years|year|y)/gi);

结果[“1.6y”,“1。5年”,“1年”]

答案 5 :(得分:0)

(?=^(0\.\d+|[1-9](?:\d+)?(?:\.\d+)?)(?:(\s+)?[\/-](\s+)?(?:0\.\d+|[1-9](?:\d+)?(?:\.\d+)?))*(?:\s+)?(?:y(?:(ea)?rs|ears?)?|m(?:onths?)?)$).*

https://regex101.com/r/kL7rQ1/3

只有我不确定“2.3 - 4 / 6.2 y”格式是否可以接受,所以我已将其包括在内。