公共前缀的正则表达式模式

时间:2014-07-08 11:51:57

标签: java regex

我有^(\d{3}.\d{2}.ABC|\d{10}.\d{6}.XYZ)$

之类的模式

我想用

匹配每个单词
                             123.45.ABC

我的问题是我有很多像[{1}}这样的扩展程序,所以我想让我的模式像前缀ABC,XYZ,PQR一样普通,然后扩展。

我想要\d{3}.\d{2}.

之类的东西
(prefix pattern) (extension)

我可以 (\d{3}.\d{2}) (.ABC or .XYZ MORE EXTENSIONS) 但它匹配两个第一组用于数字,一个用于扩展。

3 个答案:

答案 0 :(得分:1)

只需将扩展名放在非捕获组中。您可以在非捕获组中添加任意数量的扩展名。

^(\d{10}\.\d{6}\.(?:ABC|XYZ))$

<强>解释

  • ^断言我们在行的开头。
  • ()捕获小组。
  • \d{10}正好10位数。
  • \.一个文字点。
  • \d{6}完全匹配6位数字。
  • \.匹配文字点。
  • (?:)非捕获组。它不会捕获任何东西,但会进行匹配操作。
  • ABC Literal ABC
  • |逻辑OR运算符。
  • XYZ匹配文字XYZ
  • $行尾。

答案 1 :(得分:0)

听起来像

^\d{10}\.\d{6}\.[A-Z]{3}$

在Java中,使用matches我们不需要锚点:

if (subjectString.matches("\\d{10}\\.\\d{6}\\.[A-Z]{3}")) {
    // It matched!
  } 
else {  // nah, it didn't match...  
     } 

答案 2 :(得分:0)

public static void main(String[] args) {
    String s1 = "1111.111.XYZ"; // can match with AAA, VVA, ASA etc.. if you want only ABC and XYZ, then Avinash's answer is the way to go..

    String s2 = "1111.111.ABC";

    System.out.println(s1.matches("\\d{4}\\.\\d{3}\\.[A-Z]{3}"));// [A-Z]{3} matches any capital letter exactly 3 times.
    System.out.println(s2.matches("\\d{4}\\.\\d{3}\\.[A-Z]{3}"));
}

O / P:

true
true