javase 정규 표현 식 입문
다음은 코드 에서 정규 표현 식 으로 들 어 갑 니 다.
코드 세 션 1,입문 단계:
private static void testRegExpAccidence() {
// , . 。 true。match(...) , .
sop("abc".matches("..."));
// 2,reaplaceAll , \\d , &。
sop("abc1234abc".replaceAll("\\d","&"));
// 3,compile 。 Pattern, Pattern , compile
Pattern pat = Pattern.compile("[abc]{3}");
Matcher mat = pat.matcher("abc"); // Pattern , Matcher
sop(mat.matches());// "abc".matches("[abc]{3}") , [abc]{3}
sop("------------. * + ? --------------------");
// . * + ? 。
sop("a".matches(".")); //.
sop("aaaa".matches("a*")); //X* X 0
sop("aaaa".matches("a+")); //X+ X 1
sop("aaaa".matches("a?"));//false //X? X 1 0
sop("".matches("a*"));
sop("".matches("a+")); //false
sop("".matches("a?"));
sop("a".matches("a*"));
sop("a".matches("a+"));
sop("a".matches("a?"));
sop("2343902594".matches("\\d{3,100}")); // \\d {3,100} 3 , 100
sop("192.168.0.aaa".matches("\\d{3}\\.\\d{3}\\.\\d{3}\\.\\d{3}")); //false, true
sop("192".matches("[0-2][0-9][0-9]"));
sop("--------------- ------------------------");
sop("a".matches("[abc]")); //true,[abc] , a b c,
sop("a".matches("[^abc]")); //false, [^abc] , a b c,
sop("A".matches("[a-zA-Z]")); //true [a-zA-Z] a-z A-Z
sop("A".matches("[a-z]|[A-Z]"));//true, [a-z]|[A-Z] a-z A-Z
sop("A".matches("[a-z[A-Z]]"));//true, [a-z[A-Z]] a-z A-Z
sop("R".matches("[A-Z&&[RFG]]"));//true [A-Z&&[RFG]] A-Z RFG RFG
sop("--------------- s、 w、 d、 ------------------------");
//\s \w \d \ \s \w (a-z0-9_A-Z) \d
// \ , \t\r
, \, \\。
sop("
\r\t".matches("\\s{4}")); //\s, \\s, 。
sop(" ".matches("\\S")); // \S, \s , ( )。 \D false。
sop("a_8".matches("\\w{3}")); // \\w ,{3} 。 true 。
//sop("\\".matches("\\")); // , matches , java \\ ,
// , java , 。
sop("\\".matches("\\\\"));
sop("--------------- boundary ^ $ \\b------------------------");
sop("hello sir".matches("^h.*")); //^ [] , , h
sop("hello sir".matches(".*ir$")); //$ , ir
// \\b , \t \r
。
sop("hello sir".matches("^h[a-z]{1,3}o\\b.*")); // . , ,1 。
sop("hellosir".matches("^h[a-z]{1,3}o\\b*")); // false 。
sop("--------- ------------");
sop("aaa 8888c".matches(".*\\d{4}.")); // true, .* 0
sop("aaa 8888c".matches(".*\\b\\d{4}.")); // true, .* 0
sop("aaa8888c".matches(".*\\d{4}."));
sop("aaa8888c".matches(".*\\b\\d{4}."));// false , \\b , \d{4} 。
sop("[email protected]".matches("\\w+@\\w+\\.\\w+")); // , @ . - 。
sop("[email protected]".matches("[\\w.-]+@[\\w.-]+\\.\\w+"));
}
코드 세 션 2:Matcher 류 의 find,start,end,lookingAt 방법 을 파악 합 니 다.
private static void testFindAndLookingAt() {
sop("---------------------matcher.find matcher.lookingAt match.reset --------------------------");
Pattern p = Pattern.compile("\\d{3,5}");
Matcher match = p.matcher("234-32132-4321-00");
sop(match.matches()); //matches find , 。
match.reset(); // reset ,matches false, 4
sop(match.find()); // , find 32132 , 。( reset )。 false 。
sop(match.start()+"--"+match.end()); // find true , start , 0, 3(3 )
sop(match.find());
sop(match.start()+"--"+match.end()); // start 4,end 9 。
sop(match.find());
sop(match.start()+"--"+match.end());
sop(match.find());
//sop(match.start()+"--"+match.end()); // , 。 find false, 。 start end
// IllegalStateException: No match available
sop(match.lookingAt()); // lookingAt true, lookingAt 。
sop(match.lookingAt());
}
코드 세 션 3:강력 한 replace,replace All,append Replacement 방법 파악
private static void testReplacement() {
sop("---------------------------match.replece ---------------------");
//CASE_INSENSITIVE Pattern.CANON_EQ
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
// java 。 java
Matcher match = p.matcher("Java java JAva JAVa ILOVEJAVA youhateJaVa asdfasl;kdfj");
//sop(match.replaceAll("SOP")); // java SOP, java 。
// , java , SOP, HELP。 while find
int count = 0;
StringBuffer buf = new StringBuffer(); // StringBuilder, matcher Builder
while(match.find()){
if(0 == count++%2){
match.appendReplacement(buf, "HELP");
}else{
match.appendReplacement(buf, "SOP");
}
}
sop(match.appendTail(buf)); // find asdf 。
}
코드 세 션 4:url 에서 메 일 주 소 를 캡 처 합 니 다:
/**
* , http , , e-mail 。
*/
private static void testUrlFetchEmail() throws Exception {
sop("----------------- URL , e-mail ----------------------");
//http://dzh.mop.com/whbm/20060220/3/S7gSlI706d198a73.shtml
URL url = new URL("http://dzh.mop.com/whbm/20060220/3/S7gSlI706d198a73.shtml");
sop(url.getContent());
sop(url.getQuery());
InputStream is = url.openStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
Pattern p = Pattern.compile("([\\w.-]+)@([\\w.-]+)\\.\\w+");
//Pattern p = Pattern.compile("^([\\w.-]+)@([\\w.-]+)\\.\\w+"); // ^ ,
String line = null; // URL , , <br> <P> <dir> , 。
while((line=br.readLine())!=null){
Matcher ma = p.matcher(line);
while(ma.find()){ //group find 。 :java.lang.IllegalStateException: No match found
sop(ma.group()+" :"+ma.group(1)+", :"+ma.group(2));
}
//sop(line);
//java.lang.IllegalStateException: No match found
}
}
코드 세 션 5:코드 줄 통계
/**
* , .java 。
* @param dir 。 D:\test ( )
* @throws Exception
*/
private static void parseDirCodeNum(File dir) throws Exception{
File[] files = dir.listFiles(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
File tempFile = new File(dir,name);
if(tempFile.isFile()){ // , .java , true,
if(name.endsWith(".java")){
return true ;
}else{
return false;
}
}
return true;
}
});
for(File f : files){
if(f.isDirectory()){
parseDirCodeNum(f);
}else{
parseFileDirNum(f); // java
}
}
}
/**
* 。
* @param f
* @throws Exception
*/
private static void parseFileDirNum(File f) throws Exception{
BufferedReader br = new BufferedReader(new FileReader(f));
boolean isComment = false ;
String line = null ;
while((line = br.readLine())!=null){
line = line.trim(); // , \t stratsStart
if(line.startsWith("/*")&&line.endsWith("*/")){ //
commentLine++;
}else if(line.startsWith("/*")){ // , isComment ,true 。
commentLine++;
isComment = true;
}else if(isComment){ // , false 。 */ , 。
commentLine++;
if(line.endsWith("*/")){ // , , */ 。
isComment = false;
}
}else if(line.startsWith("//")){
commentLine++;
}
else if(line.matches("^[\\s&&[^\
]]*$")){ // ,
whitespaceLine++;
}else {
normalLine++;
}
}
}
코드 세 션 6:Greedy Reluctant Possessive 수량 단어의 차 이 를 파악 합 니 다.
/**
* Greedy Reluctant Possessive
* Greedy , , , ...
* Reluctant 。 , , , ...
* Possessive
*/
private static void testGreedyReluctantPossessive() {
sop("------------- Greedy Reluctant Possessive -----------------------");
Pattern gp = Pattern.compile(".{3,10}[0-9]"); //Greedy
Pattern rp = Pattern.compile(".{3,10}?[0-9]"); //Reluctant Greedy ?
Pattern pp = Pattern.compile(".{3,10}+[0-9]"); //Possessive Greedy +
Matcher gm = gp.matcher("asdf8sdfa9"); // Greedy
Matcher rm = rp.matcher("asdf8sdfa9"); // Reluctant
Matcher pm = pp.matcher("asdf8sdfa9"); // Possessive
if(gm.find()){ // gm 10 , 。
sop(gm.start()+" "+gm.end()); // 0 10
}else{
sop(" ");
}
if(rm.find()){ // rm 3 , , 。
sop(rm.start()+" "+rm.end()); // 0 5
}else{
sop(" ");
}
if(pm.find()){ // pm 10 , , ( , )。 。
sop(pm.start()+" "+pm.end());
}else{
sop(" "); //
}
}
코드 세 션 7 관련 테스트 코드:
private static long normalLine ;
private static long commentLine ;
private static long whitespaceLine ;
public static void main(String[] args) throws Exception{
testRegExpAccidence();
testFindAndLookingAt();
testReplacement();
sop("-----------------match.group --------");
Pattern p = Pattern.compile("([\\w.-]+)@([\\w.-]+)\\.\\w+");
Matcher m = p.matcher("[email protected]");
while(m.find()){
sop(m.group());
sop(m.group(1)); // -chenshufei2
sop(m.group(2)); // sina
//sop(m.group(3)); java.lang.IndexOutOfBoundsException: No group 3
// , ( , (, 。
}
//testUrlFetchEmail(); //D:/java_setup_program_file/eclipse/design_pattern/EnhanceJava
String dirStr = "D:\\360Rec";
File dir = new File(dirStr);
parseDirCodeNum(dir);
sop(" , normalLine::"+normalLine+" ,commentLine::"+commentLine+" ,whitespaceLine::"+whitespaceLine);
testGreedyReluctantPossessive();
}
public static void sop(Object obj){
System.out.println(obj);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.