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

use*_*858 5 java regex

对不起,如果这是一个愚蠢的问题,但它在过去的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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我检查那些在我的模式中有一个字母的 regs时,我的问题就出现了.例如'12-ZD-1234'.哪里ZD不是有效的县ID,但由于D它是有效的,因此可以显示它.

任何帮助都会很棒.

我已经在一些网站上做过研究,包括这个这个.

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

通过,我将更改模式以将所有输入更改为大写以减少我的代码的大小.谢谢您的帮助

And*_*ong 5

除了\\w*其他人指出的,你还在滥用字符类([...]).要实际使用alternation(|),请取出方括号:

^(\\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})$
Run Code Online (Sandbox Code Playgroud)

以下是一些示例,向您展示角色类的实际工作方式:

  1. [abc]相匹配的单个字符,无论是a,b,或c.
  2. [aabbcc]相当于[abc](重复被忽略).
  3. [|]匹配管道字符,允许符号.
  4. [KK|kk|ww|WW|c|C|ce|CE ... ]最终相当于[K|wWcCeE ... ]因为,再次,重复被忽视.

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

  • @ user3007858不要忘记[接受这个答案](http://meta.stackexchange.com/a/65088/155831)如果它有帮助 (3认同)