gpt4 book ai didi

java - 如何避免贪婪或非特定的正则表达式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:02 25 4
gpt4 key购买 nike

//---------为清晰起见所做的编辑--------//

我查看了网络的其余部分,但到目前为止还没有答案能满足我的问题。我有一个正则表达式,它对于我正在尝试做的事情来说有点太贪婪了。例如,以下正则表达式:

(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)

将匹配

rdh8

rda6

rla1 a3

rlb2

但是,我需要我的正则表达式是具体的;我需要它来排除“rla1 a3”。目前,正则表达式匹配 rla1 a3 的“rla1”部分。由于'a3',我需要正则表达式完全忽略'rla1 a3'。

我尝试过诸如 \s?$ 之类的解决方案,但这些都没有奏效。有什么想法吗?

*编辑*//-------------------------------------------- ------------------------------//

这是问题的一些示例代码。

public ArrayList<String> theStringsToBeRead = new ArrayList<String>();

public void addLines() throws IOException
{
String line;
BufferedReader br = new BufferedReader(new FileReader("testFile"));

//put each line into an arraylist
while((line = br.readLine()) != null)
{
theStringsToBeRead.add(line.toLowerCase()); //adds each line to the arraylist
}
//parse each line in arraylist
for(String item : theStringsToBeRead)
{
testing(item); //for each line, run a regex check
}
}

public void testing(String item)
{

String regex = "(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)";
//String StevesRegex = "^(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)$"; //doesnt appear to work
Matcher m = Pattern.compile(regex).matcher(item);

while (m.find())
{
System.out.println(m.group("piece")+m.group("color")+m.group("x")+m.group("y"));
}
}

文本文件是:

rdh8
rda6
rla1 a3
rlb2

我得到的输出是:

rdh8
rda6
rla1
rlb2

期望的结果是正则表达式完全忽略所有“rla1 a3”而不是匹配它的一部分。所需的输出将是:

rdh8
rda6
rlb2

任何帮助将不胜感激,非常抱歉让任何人对这个问题感到困惑。感谢您的耐心等待。

最佳答案

你的问题有点不清楚,但如果你只想在输入的开头进行匹配,那么以下就足够了:

String regex = "^(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)$";

^ 表示“在行的开头”$ 表示“行尾”

这是一个 link在线测试。

编辑:
您的问题是由于空格引起的,要删除字符串前后的空格,请使用.trim(),即:

String s = br.readLine().trim().toLowerCase();

或者,您可以更改正则表达式以考虑空格,如下所示:

String regex = "^\\s*(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)\\s*$";

关于java - 如何避免贪婪或非特定的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20297314/

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