其实就是这一句
String reg = "\d{5}(?(?=-)-\d{4})";
运行显示
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 7
\d{5}(?(?=-)-\d{4})
这个是正则表达式必知必会上的例子,
从文本
11111
22222
33333-
44444-4444
匹配124.
为什么会报错呢?
多谢啊!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ZhengZe {
public static void main(String[] args) throws Exception {
FileReader f = new FileReader(new File("C:/abcd.txt"));
BufferedReader br = new BufferedReader(f);
String reg = "\\d{5}(?(?=-)-\\d{4})";
Pattern p = Pattern.compile(reg);
String s;
FileWriter fw = new FileWriter(new File("c:/output.txt"));
BufferedWriter bw = new BufferedWriter(fw);
while ((s = br.readLine()) != null) {
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group());
bw.write(m.group()+"\r\n");
}
}
br.close();
bw.close();
}
}
Java不支持这种语法
http://www.regular-expressions.info/conditional.html
String zip = "11111 22222 33333- 44444-4444";
String regex = "\\d{5}(?=(-\\d{4}|\\s|$))(-\\d{4})?";
Matcher m = Pattern.compile(regex).matcher(zip);
while(m.find())
System.out.printf("Macthed: [%s]%n", m.group(1));
斜杠要写两个才可以。
测试:
http://tool.oschina.net/regex
\\
斜杠等特殊字符的转义,要门直接用实体表示,要么就用 “\” 转义