gpt4 book ai didi

java - 尝试从文件中读取时正则表达式匹配失败(Java 中的 SIC 汇编程序)

转载 作者:行者123 更新时间:2023-11-30 06:53:25 26 4
gpt4 key购买 nike

我目前正在研究 SIC 汇编程序并扫描以下文件中的行:

begin   START   0
main LDX zero
copy LDCH str1, x
STCH str2, x
TIX eleven
JLT copy

str1 BYTE C'TEST STRING'
str2 RESB 11
zero WORD 0
eleven WORD 11
END main

正如您可能已经猜到的那样,我正在使用正则表达式从每一行代码中提取字段。现在,我只是在测试这些行是否与正则表达式匹配(正如它们应该的那样)。如果是,程序会打印它们。问题是,它只识别第一行,而忽略其余部分(即从第二行开始,它们与正则表达式不匹配)。到目前为止,这是代码:

public static void main(String args[]) throws FileNotFoundException {
Scanner scan = new Scanner(new File("/home/daniel/test.asm"));
Pattern std = Pattern.compile("(^$|[a-z0-9\\-\\_]*)(\\s+)([A-Z]+)(\\s+)([a-z0-9\\-\\_]*)");
String lineFromFile;

lineFromFile = scan.nextLine();
Matcher standard = std.matcher(lineFromFile);

while (standard.find()) {
System.out.println(lineFromFile);
lineFromFile = scan.nextLine();
}
}

它只打印第一行:

begin   START   0

奇怪的事情来了:如果我直接从文件中复制第二行,并用它声明一个 String 对象,然后手动测试它,它确实有效!其他线路也一样。像这样的东西:

public static void main(String args[]) throws FileNotFoundException {
Scanner scan = new Scanner(new File("/home/daniel/test.asm"));
Pattern std = Pattern.compile("(^$|[a-z0-9\\-\\_]*)(\\s+)([A-Z]+)(\\s+)([a-z0-9\\-\\_]*)");
String lineFromFile;

lineFromFile = "main LDX zero";
Matcher standard = std.matcher(lineFromFile);

if (standard.find())
System.out.println(lineFromFile);
}

它确实打印出来了!

main    LDX     zero

我不知道它是否与正则表达式或文件有关。如果你们中的任何人帮助我找到错误,我将不胜感激。谢谢你的时间! :)

最佳答案

注意:- 我假设您的正则表达式是正确的

您需要为从输入中读取的每一行更新 Matcher 对象。 (为了演示,我刚刚更新了您的代码以从控制台而不是文件逐行读取。)

Java 代码

String pattern = "(^$|[a-z0-9\\-\\_]*)(\\s+)([A-Z]+)(\\s+)([a-z0-9\\-\\_]*)"; 

Pattern r = Pattern.compile(pattern);

String line = "";
Matcher m;
while((line = tmp.nextLine()) != null) {
m = r.matcher(line);
while(m.find()) {
System.out.println(m.group(1) + m.group(2)+ m.group(3)+ m.group(4)+ m.group(5));
}
}

Ideone Demo

不过,在单行上有多个匹配项之前,在这里使用 if 就足够了

if(m.find()) {
System.out.println(m.group(1) + m.group(2)+ m.group(3)+ m.group(4)+ m.group(5));
}

编辑

假设您的输入只有三部分,您可以改用这个正则表达式

^((?:\w+)?\s+)(\w+\s+)(.*)$

Regex Demo

关于java - 尝试从文件中读取时正则表达式匹配失败(Java 中的 SIC 汇编程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625937/

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