gpt4 book ai didi

Java正则表达式模式匹配(爱尔兰汽车登记)

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:39 26 4
gpt4 key购买 nike

抱歉,如果这是一个愚蠢的问题,但在过去的 5 天里,它一直让我精神错乱。

我正在尝试制作一个正则表达式模式来匹配爱尔兰汽车注册示例“12-W-1234”到目前为止,这就是我所拥有的:

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("12-WW-1");
input.add("12-W-223");
input.add("02-WX-431");
input.add("98-zd-4134");
input.add("99-c-7465");


for (String car : input) {
if (car.matches("^(\\d{2}-?\\w*([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})$")) {
System.out.println("Car Template " + car);
}
}
}
}

当检查在我的模式中有一个单个字母 的规则时,我的问题出现了。例如 '12-ZD-1234'。其中 ZD 不是有效的县 ID,但由于 D 有效,因此允许显示它。

任何帮助都会很棒。

我已经对一些网站进行了研究,包括 thisthis .

这些网站有所帮助,但我仍然遇到问题。

顺便说一下,我要更改模式以将所有输入更改为大写以减少我的代码的大小。感谢您的帮助

最佳答案

除了其他人指出的 \\w* 之外,您还滥用了字符类 ([...])。要实际使用交替 (|),还要去掉方括号:

^(\\d{2}-?(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})$

下面是一些示例,向您展示字符类的实际工作原理:

  1. [abc] 匹配单个 字符,abc
  2. [aabbcc] 等同于 [abc](忽略重复项)。
  3. [|] 匹配管道字符, 符号是允许的。
  4. [KK|kk|ww|WW|c|C|ce|CE ... ] 最终等同于 [K|wWcCeE ... ]因为,同样,重复项被忽略了。

您使用交替运算符 (|) 来执行您想要的操作是正确的,但您不需要使用字符类。

关于Java正则表达式模式匹配(爱尔兰汽车登记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20070387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com