/^(?:(?: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
答案 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})?))
附近的点。该点匹配任何字符,但换行符。