gpt4 book ai didi

java - 给出意外匹配的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:31 27 4
gpt4 key购买 nike

我一直在使用 http://www.regexplanet.com/advanced/java/index.html测试我编写的正则表达式。

正则表达式为:\A[\d+(-\d+){0,1}\|\d+\|\d+\|[YN]{1}](,[\d+(-\d+) {0,1}\|\d+\|\d+\|[YN]{1}])*\z

我正在尝试匹配 '[30-41|2|21|Y]' 或 '[15-23|45|12|Y],[15|42|6|Y]' 形式的字符串等等

在那个网站上测试时,正则表达式似乎工作得很好,但是当我在我自己的 java 代码中使用它时(见下文),它给了我意想不到的匹配(我已经将控制台输出粘贴在代码下面)。有谁知道我在这里做错了什么?

编辑:正如 stema 所指出的,我在创建模式和匹配器时输入的字符串和模式的顺序错误。我现在已经交换了这些回合,但现在“找不到匹配项”。

public static void testRegex(String inputString){

String regex = "\\A\\[\\d+(\\-\\d+){0,1}\\|\\d+\\|\\d+\\|[YN]{1}\\](,\\[\\d+(\\-\\d+){0,1}\\|\\d+\\|\\d+\\|[YN]{1}\\])*\\z";

Pattern pattern = Pattern.compile(inputString);

Matcher matcher = pattern.matcher(regex);

boolean found = false;

while(matcher.find()){
System.out.println("Found at :");
System.out.println("start - " + matcher.start());
System.out.println(", end - " + matcher.end() + ". ");
found = true;
}

if(!found){
System.out.println("no match found");
}
}


public static void main(String[] args){
testRegex("[61|12|6]");
}

我得到的控制台输出:

发现于:开始 - 17,结束 - 18。发现于:开始 - 20,结束 - 21。发现于:开始 - 25,结束 - 26。发现于:开始 - 30,结束 - 31。发现于:开始 - 36,结束 - 37。发现于:开始 - 57,结束 - 58。发现于:开始 - 60,结束 - 61。发现于:开始 - 65,结束 - 66。发现于:开始 - 70,结束 - 71。发现于:开始 - 76, 结束 - 77.

最佳答案

你的代码有误

Pattern pattern = Pattern.compile(inputString);
Matcher matcher = pattern.matcher(regex);

你需要编译模式而不是输入字符串,这样会更好:

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(inputString);

使用您的“模式”[61|12|6],您可以找到“1”和“|”在正则表达式中。

更新

您没有在正则表达式中包含输入字符串模式 ([61|12|6]),因为您在第四部分测试 \\|[YN] 不是可选的。试试这个:

\\A\\[\\d+(\\-\\d+)?\\|\\d+\\|\\d+(?:\\|[YN])?\\](,\\[\\d+(\\-\\d+)?\\|\\d+\\|\\d+(?:\\|[YN])?\\])*\\z

查看here on Regexr

关于java - 给出意外匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834419/

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