正则表达式匹配错误的值

时间:2016-02-22 12:33:20

标签: regex

/^(?:(?:x[0-9]{1,3}:[0-9]+(?:\.?[0-9]{1,2})?)|(?:[0-9]+(?:.[0-9]{1,2})?))(?:\/x[0-9]{1,3}:[0-9]+(?:\.?[0-9]{1,2})?)*$/

您好, 我的正则表达式应该匹配:

5 40.33 23.50/x4:50.22 11/x2:50/x4:68/x6:102.48

我试着描述......" /"分隔了无限的块。第一个块始终只是一个浮点值。所有其他块都以" x [0-9] +:"开头。然后浮动值。

但我的正则表达也匹配:

40/50

1 个答案:

答案 0 :(得分:1)

import java.io.*; import java.util.StringTokenizer; public class p02gpa { public static void main(String[] args) throws IOException { String file = "p02-grades.txt"; BufferedReader br = new BufferedReader(new FileReader(file)); String rec; String fmt = "%2d: %-12s %3d %-8s %-20 %n"; System.out.println(" Name GPA Classes Hours/Grades"); System.out.println(" ------------------ ---- -------- ------------------------ "); while((rec=br.readLine())!= null) calcDisp(rec); br.close(); } public static void calcDisp(String rec) { StringTokenizer tok; String name; String fname; String lname; double ptValue=0; double classes; double qualtyPts; double hours; double gpa; int ctr=0; tok = new StringTokenizer(rec,",|/|"); lname = tok.nextToken(); fname = tok.nextToken(); name = fname+ " "+lname; System.out.print(name); ctr++; while(tok.hasMoreTokens()) { String nameS =tok.nextToken(); String letterGrade =tok.nextToken(); System.out.print(letterGrade); hours =Integer.parseInt(nameS); System.out.print(hours); if(letterGrade == "A") ptValue = 4.0; if(letterGrade == "B") ptValue = 3.0; if(letterGrade == "C") ptValue = 2.0; if(letterGrade == "D") ptValue = 1.0; if(letterGrade == "F") ptValue = 0.0; qualtyPts = ptValue * hours; gpa = qualtyPts / hours; } System.out.println(""); } } 40/50而匹配。你忘了逃离(?:(?:x[0-9]{1,3}:[0-9]+(?:\.?[0-9]{1,2})?)|(?:[0-9]+(?:.[0-9]{1,2})?))附近的点。该点匹配任何字符,但换行符。