正则表达式年份范围 import java.util.ArrayList; 导入java.util.List; 公共类ValidateDemo{ 公共静态void main(字符串[]args){ 列表输入=新的ArrayList(); 输入。添加(“2005-WW-1”); 输入。添加(“3012-W-223”); 输入。添加(“1952-WX-431”); 输入。添加(“19998-d-4134”); 输入。添加(“1899-c-7465”); for(字符串车:输入){ (3-3-9[0-9[0-9[0-9[0-9[0-9[0-9];201-2[0-0-2)如果(b-)b-)b-?(KK| KKKKKKKKKKKKKK0| KKKKKKKKK| ww| KKKKKKKKKKKKKK自然自然自然自然无无无无无无无本本本本本124;WW124;WW124;WW124;;;;中国中国中国|;;中国中国中国中国中国中国中国中国(124;;中国(124;;;;;;中国中国中国中国中国(124;;;中国中国)中国中国中国中国中国中国中国中国)))的中国(124;;;;;;;;;;;;中国(124;中国(124;;;中国中国中国中国)))))| lk | lm | lm | ls | ls | mh | mh | mn | mo | mo | oy | so | rn | tn | tn | ts | ts | w | w | wd | wd | wh | wh | wh | wx | | | x | | x | wd | | | 4 | |{ System.out.println(“汽车模板”+汽车); } } } }
我试图让它与1980-2015年的汽车牌照相匹配(我知道这不是我的模式),但我一直得到一个“无与伦比的收盘”)错误正则表达式年份范围 import java.util.ArrayList; 导入java.util.List; 公共类ValidateDemo{ 公共静态void main(字符串[]args){ 列表输入=新的ArrayList(); 输入。添加(“2005-WW-1”); 输入。添加(“3012-W-223”); 输入。添加(“1952-WX-431”); 输入。添加(“19998-d-4134”); 输入。添加(“1899-c-7465”); for(字符串车:输入){ (3-3-9[0-9[0-9[0-9[0-9[0-9[0-9];201-2[0-0-2)如果(b-)b-)b-?(KK| KKKKKKKKKKKKKK0| KKKKKKKKK| ww| KKKKKKKKKKKKKK自然自然自然自然无无无无无无无本本本本本124;WW124;WW124;WW124;;;;中国中国中国|;;中国中国中国中国中国中国中国中国(124;;中国(124;;;;;;中国中国中国中国中国(124;;;中国中国)中国中国中国中国中国中国中国中国)))的中国(124;;;;;;;;;;;;中国(124;中国(124;;;中国中国中国中国)))))| lk | lm | lm | ls | ls | mh | mh | mn | mo | mo | oy | so | rn | tn | tn | ts | ts | w | w | wd | wd | wh | wh | wh | wx | | | x | | x | wd | | | 4 | |{ System.out.println(“汽车模板”+汽车); } } } },java,regex,Java,Regex,我试图让它与1980-2015年的汽车牌照相匹配(我知道这不是我的模式),但我一直得到一个“无与伦比的收盘”)错误 因此,例如“2005-WW-1”应该是唯一与模式匹配的输入。您的正则表达式包含2个左括号(()和3个右括号()) 错误 不匹配的结尾“')” 这是相当描述性的 我假设您必须在靠近末端的某个位置添加一个开口括号: import java.util.ArrayList; import java.util.List; public class ValidateDemo { pu
因此,例如“2005-WW-1”应该是唯一与模式匹配的输入。您的正则表达式包含2个左括号(
(
)和3个右括号()
)
错误
不匹配的结尾“')”
这是相当描述性的
我假设您必须在靠近末端的某个位置添加一个开口括号:
import java.util.ArrayList;
import java.util.List;
public class ValidateDemo {
public static void main(String[] args) {
List<String> input = new ArrayList<String>();
input.add("2005-WW-1");
input.add("3012-W-223");
input.add("1952-WX-431");
input.add("19998-d-4134");
input.add("1899-c-7465");
for (String car : input) {
if (car.matches("^\b(19[3-9][0-9]|200[0-9]|201[0-2])\b-?(KK|kk|ww|WW|c|C|ce|CE|cn|CN|cw|CW|d|D|dl|DL|g|G|ke|KE|ky|KY|l|L|ld|LD|lh|LH|lk|LK|lm|LM|ls|LS|mh|MH|mn|MN|mo|MO|oy|OY|so|SO|rn|RN|tn|TN|ts|TS|w|W|wd|WD|wh|WH|wx|WX)-?\\d{1,4}\\d)$")) {
System.out.println("Car Template " + car);
}
}
}
}
我的正则表达式不充分,但我相信这就是你想要的:
-?\\d{1,4}\\d)$
你为什么不直接获取前4个字符,看看它们是否在一个范围内
-?(\\d{1,4}\\d)$
var year=Integer.Parse(myString.SubString(0,4));//省略错误检查
如果(年份>1985年和<2005年){}
- 从正则表达式末尾删除最后一个右括号-它应该看起来像
或更简单的-?\\d{1,4}\\d$”
\\d{2,5}$
- 如果希望它表示单词边界,请将
(退格符号)更改为\b
\\b
- 另外,不要用正则表达式检查整数范围,因为它不是进行此操作的合适工具。维护这样的正则表达式将是一场噩梦。相反,将您感兴趣的部分转换为整数(您可以使用
)并使用比较运算符的正确组合(integer.parseInt(String)
,
)=
\b
应该是\\b
\\d
(如果您只想匹配2到5,则将其前面的一个更改为{2,5})var year = Integer.Parse(myString.SubString(0, 4)); // Error checking omitted
if(year > 1985 && year < 2005) { }
还请注意,这与1930年以后的车牌匹配,而不是您在文本中指定的1980年的车牌匹配。我建议类似于Pshemo的答案,实现为:
if (car.matches("^\\b(19[3-9][0-9]|200[0-9]|201[0-2])\\b-?(KK|kk|ww|WW|c|C|ce|CE|cn|CN|cw|CW|d|D|dl|DL|g|G|ke|KE|ky|KY|l|L|ld|LD|lh|LH|lk|LK|lm|LM|ls|LS|mh|MH|mn|MN|mo|MO|oy|OY|so|SO|rn|RN|tn|TN|ts|TS|w|W|wd|WD|wh|WH|wx|WX)-?\\d{1,4}$")) {
import java.util.ArrayList;
导入java.util.List;
导入java.util.regex.*;
公共类ValidateDemo
{
公共静态void main(字符串[]args){
列表输入=新的ArrayList();
输入。添加(“2005-WW-1”);
输入。添加(“3012-W-223”);
输入。添加(“1952-WX-431”);
输入。添加(“19998-d-4134”);
输入。添加(“1899-c-7465”);
字符串re=“^(\\d+)-?(KK | WW | C | CE | CN | CW | d | DL | k | KY | L | LD | LH | LK | LM LS | MH | MN | MO | OY | SO | RN | TN | TS | W | WD | | | | x | d | 4;
Pattern p=Pattern.compile(re,Pattern.CASE\u不区分大小写);
for(字符串车:输入){
匹配器m=匹配器p(汽车);
系统输出打印(car+“-”+m.matches()+“-”);
系统输出打印(m组(1));
int year=Integer.parseInt(m.group(1));
如果(年份>=1980&&year)结尾处的大括号(就在“$”
”之前)没有开始大括号。感谢您修复了错误,但我的年份范围仍然不起作用。有什么想法吗?
import java.util.ArrayList;
import java.util.List;
import java.util.regex.*;
public class ValidateDemo
{
public static void main(String[] args) {
List<String> input = new ArrayList<String>();
input.add("2005-WW-1");
input.add("3012-W-223");
input.add("1952-WX-431");
input.add("19998-d-4134");
input.add("1899-c-7465");
String re = "^(\\d+)-?(KK|WW|C|CE|CN|CW|D|DL|G|KE|KY|L|LD|LH|LK|LM|LS|MH|MN|MO|OY|SO|RN|TN|TS|W|WD|WH|WX)-?\\d{1,4}$";
Pattern p = Pattern.compile(re, Pattern.CASE_INSENSITIVE);
for (String car : input) {
Matcher m = p.matcher(car);
System.out.print(car + " - " + m.matches() + " - ");
System.out.print(m.group(1));
int year = Integer.parseInt(m.group(1));
if( year >= 1980 && year <= 2015 ) System.out.println(" <-- CORRECT");
else System.out.println();
}
}
}