gpt4 book ai didi

java - 为什么,我总是得到错误的正则表达式模式匹配,如何测试和调试它以及在什么时候条件变为假?

转载 作者:行者123 更新时间:2023-11-29 08:22:51 25 4
gpt4 key购买 nike

我有下面的字符串,我正在尝试用 java 编写正则表达式模式

**String value = "ABC6072103325000100120190429R070001";**

please consider space bar for the part of the string
ABC6 0721 033250001001 20190429 R 07 0001
  • 第 1 部分 - CNV6

    最大长度 -> 长度始终为 4,字母数字 A-Z0-9

  • 第二部分 - 0721

    长度始终为 4,只允许 0-9 位数字

  • 第三部分 - 033250001001

    长度始终为 12,只允许使用数字

  • 第 4 部分 - 20190507,

    格式总是 YYYYMMDD,只允许数字最大长度 8

  • 第 5 部分 - R

    在这种情况下,R 总是不变的

  • 第六部分 - 07

    只允许 2 位数字

  • 第 7 部分 - 0001

    只允许 1-4 位数字

据我所知,我已经在正则表达式下面写了,但在我的每一次尝试中它都变成了错误。

String s = "[A-Z0-9]{4}[0-9]{16}[1-9][0-9]{3}[0(1-9)|1(0-2)][0(1-9)|1(0- 
9)|z(0-9)|3(0-1)](R0)(1-9)0(0-9){1,3}";

下面是我的程序

package regextest;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
public static String regex ="[A-Z0-9]{4}[0-9]{16}[1-9][0-9]{3}[0(1-9)|1(0-2)] \r\n[0(1-9)|1(0-9)|2(0-9)|3(0-1)](R0)(1-9)0(0-9){1,3}";
public static void main(String[] args) {
String stringToMatch = "ABC6072103325000100120190429R070001";
boolean isValid = isValidRegex(stringToMatch);
System.out.println("isValid : " + isValid);
}

public static boolean isValidRegex(String stringToMatch) {
boolean isValid =false;

// Create a Pattern object
Pattern r = Pattern.compile(regex);

// Now create a matcher object.
Matcher m = r.matcher(stringToMatch);
if (m.find( )) {
System.out.println("Matched");
isValid = true;
}else {
System.out.println("NO MATCH");
isValid = false;
}
return isValid;
}
}

output - NO MATCH

最佳答案

关于你的模式:

在这些部分 [0(1-9)|1(0-2)][0(1-9)|1(0-9)|z(0 -9)|3(0-1)]( 我认为您的目标是将 | 用作 OR,但这在 character class 中不起作用。

第一部分例如等于 [)(0-9] 由于 0 和范围 1-9 和 0-2。因此第二部分也不适合匹配类似日期的格式。

要匹配没有更具体日期的数字位数,例如模式,您可以使用:

[A-Z\d]{4}\d{4}\d{12}\d{8}R\d{2}\d{4}

在Java中

String regex = "[A-Z\\d]{4}\\d{4}\\d{12}\\d{8}R\\d{2}\\d{4}";

你也可以使用 [0-9] 而不是 \\d

Regex demo

注意

要匹配“类似日期”模式 YYYYMMDD 以缩小可能接受的数字范围,您可以使用以下正则表达式,但它本身不会验证日期。

^\d{4}(?:1[012]|0[1-9])(?:3[01]|[12][0-9]|0[1-9])$

Regex demo

关于java - 为什么,我总是得到错误的正则表达式模式匹配,如何测试和调试它以及在什么时候条件变为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56023215/

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