Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式检查以结尾的字符串在java中是否有效_Java_Regex - Fatal编程技术网

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

使用正则表达式检查以结尾的字符串在java中是否有效,java,regex,Java,Regex,我有以下要求,在这里,我只需要在给定字符串以“Y”或“Years”或“Years”结尾时做一些事情 我试着用正则表达式这样做 String text=1.5Y; if(Pattern.matches("Y$",text) || Pattern.matches("YEARS$",text) || Pattern.matches("Years",text)) { //do } 然而,这是失败的 有人能告诉我哪里出了问题,或者给我建议其他可行的方法吗 编辑: 谢谢,那很有帮助 最后,我使用了“(?I

我有以下要求,在这里,我只需要在给定字符串以“Y”或“Years”或“Years”结尾时做一些事情

我试着用正则表达式这样做

String text=1.5Y;
if(Pattern.matches("Y$",text) || Pattern.matches("YEARS$",text) || Pattern.matches("Years",text))
{
//do
}
然而,这是失败的

有人能告诉我哪里出了问题,或者给我建议其他可行的方法吗

编辑:

谢谢,那很有帮助

最后,我使用了
“(?I^.*Y(ears)$|(?I^.*M(月)?$”

但我想做更多的改变,让它变得完美

假设我有很多弦

理想情况下,只有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;

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

^.*Y$
第一个图案

顺便说一句,您可以对所有3种情况使用单个正则表达式:

if (text.matches( "(?i)^.*Y(ears)?$" ) ) {...}
(?i)
忽略大小写匹配

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

您可以直接使用它。从一开始就匹配。因此,您的匹配失败。

此处不需要正则表达式:

if(text.endsWith("Y") || ...)

您可以简单地使用regex模式:

if (Pattern.matches(".*(Y|YEARS|Years)$",text)) {/*do something*/}
/((?!0)\d+| 0)(.\d+)(?:年/年)/gi

结果[“1.6年”、“1.5年”、“1年”]

我唯一不确定的是“2.3-4/6.2y”格式是否可以接受,所以我把它包括进去了

var text = "1.6y   1.5years  1year 1.5h";
text.match(/((?!0)\d+|0)(\.\d+)?(?:years|year|y)/gi);
(?=^(0\.\d+|[1-9](?:\d+)?(?:\.\d+)?)(?:(\s+)?[\/-](\s+)?(?:0\.\d+|[1-9](?:\d+)?(?:\.\d+)?))*(?:\s+)?(?:y(?:(ea)?rs|ears?)?|m(?:onths?)?)$).*