Java 정규 표현식 기능 및 응용

6816 단어 Java정규 표현식
정규 표현식은 특정한 패턴으로 문자열을 일치시키는 공식이고, 정규 표현식은 일반적인 문자와 메타카릭스(metacharacters)로 구성된다.일반 문자는 대소문자의 자모와 숫자를 포함하지만, 원 문자는 특수한 의미를 가지고 있다.Net 플랫폼이든 Java 플랫폼이든 정규 표현식의 의미는 모두 같다. 다음에 우리는 주로 Java 정규 표현식의 기능과 구체적인 응용을 분석하고 글이 당신에게 도움이 되기를 바랍니다. 참고만 하겠습니다.jdk1.4에서java를 내놓은 이후.util.regex 패키지는 자바 정규 표현식이 매우 복잡한 체계이기 때문에 우리에게 좋은 자바 정규 표현식 응용 플랫폼을 제공했다.\백슬래시\t 간격('\u0009') 줄 바꿈('\u000A')\r 리턴('\u000D')\d 숫자는 [0-9]\D 비숫자와 [^0-9]\s 공백 기호 [\t\x0B\f\r]\S 비공백 기호 [^\t\x0B\f\r]\w 단독 문자 [a-zA-Z_0-9]\W 비단독 문자 [^a-zA-Z_0-9]\f 페이지 바꾸기\e Escape\b 단어의 경계\B 단어가 아닌 경계\G 앞의 일치하는 끝 ^ 제한 시작 ^ 자바 조건 제한 끝 java 조건 제한 java 조건 제한 java 조건 제한 끝 문자로 제한.조건 제한을 제외한 모든 단독 문자java...조건은 자바로 제한된 후 줄 바꿈을 제외한 임의의 두 문자에 특정 제한 조건을 추가합니다 [][a-z] 조건은 소문자 a to z 범위에서 한 문자로 제한됨 [A-Z] 조건은 대문자 A to Z 범위에서 한 문자로 제한됨 [a-zA-Z] 조건은 소문자 a to z 또는 대문자 A to Z 범위에서 한 문자로 제한됨 [0-9] 조건은 소문자 0 ~ 9 범위에서 한 문자로 제한됨 [0-9a-z] 조건은 소문자 0 ~ 9 또는 a to z 범위에서 한 문자로 제한됨 [0-9[a-z]] 조건은 소문자 0 to 9 또는 a to z 범위에서 한 문자(교집합) []에 ^를 추가한 후 다시 제한 조건을 추가합니다. [^a-z] 조건은 대문자 a to z 범위에서 한 문자로 제한됩니다. [^A-Z] 조건은 대문자 A to Z 범위에서 한 문자로 제한됩니다. [^a-zA-Z] 조건은 대문자 a to z 또는 대문자 A to Z 범위에서 한 문자로 제한됩니다. [^0-9] 조건은 대문자 0 to 9 범위에서 한 문자로 제한됩니다. [^0-9a-z]조건은 비소문자 0 to 9 또는 a to z 범위에서 한 문자로 제한됩니다 [^0-9[a-z]] 조건은 비소문자 0 to 9 또는 a to z 범위에서 한 문자로 제한됩니다 (교차). 제한 조건이 특정 문자로 0회 이상 나타날 때 "*"J* 0 이상 J.* 를 사용할 수 있습니다0 자 이상의 임의 문자 J.*D J와 D 사이의 0 자 이상의 임의 문자는 제한 조건이 특정 문자로 1회 이상 나타날 경우 "+"J+를 사용할 수 있습니다.1자 이상의 임의 문자 J+D J와 D 사이의 1자 이상의 임의 문자는 제한 조건이 특정 문자에 대해 0 또는 1회 이상 나타나면 "?"를 사용할 수 있습니다.JA? J나 JA의 출현은 지정된 횟수 문자인'{a}'J{2} JJ J{3} JJJ 문자 a개 이상으로 제한되며,'{a,} J{3,} JJJ, JJJ, JJJJ,??(3회 이상 J 병존) 문자 개 이상, b개 이하'{a, b}'J{3,5} JJJ 또는 JJJ 둘 중 하나'|'J|A J 또는 A Java|Hello Java 또는 Hello'()'에서 하나의 조합 유형을 지정합니다. 예를 들어 index에서 사이의 데이터를 조회하면 (.+?) Pattern 사용 중입니다.compile 함수 시 Java 정규 표현식의 일치 동작을 제어하는 매개 변수인 Pattern Pattern을 추가할 수 있습니다.compile(String regex, int flag) flag의 범위는 다음과 같습니다. Pattern.CANON_EQ는 두 문자의'정규 분해 (canonical decomposition)'가 완전히 같은 경우에만 일치한다고 인정합니다.예를 들어 이 로고를 사용하면 표현식'a\u030A'가'?'와 일치합니다.기본적으로'규범 상등성 (canonical equivalence)'을 고려하지 않습니다.Pattern.CASE_INSENSITIVE (?) 는 기본적으로 대소문자 불일치는 US-ASCII 문자 세트에만 적용됩니다.이 로고는 표현식으로 하여금 대소문자를 무시하고 일치하게 할 수 있다.유니코드 문자를 크기 불일치시키려면 UNICODE_케이스와 이 로고를 합치면 됩니다.Pattern.COMMENTS(?x)는 이 모드에서 일치할 때 Java 정규 표현식의 공백 문자를 무시합니다. (번역자 주: 표현식의 "\s"가 아니라 표현식의 공백, tab, 리턴 등)메모는 # 에서 시작하여 이 행이 끝날 때까지 계속됩니다.내장형 플래그를 사용하여 Unix 행 모드를 활성화할 수 있습니다.Pattern.DOTALL(?s) 모드에서 표현식 "."한 줄을 나타내는 끝 문자를 포함하여 모든 문자를 일치시킬 수 있습니다.기본적으로 표현식'.'행의 끝 문자가 일치하지 않습니다.Pattern.MULTILINE(?) 모드에서'^'와'$'는 각각 한 줄의 시작과 끝을 일치합니다.또한'^'는 문자열의 시작과 일치하고,'$'도 문자열의 끝과 일치합니다.기본적으로 이 두 표현식은 문자열의 시작과 끝만 일치합니다.Pattern.UNICODE_CASE (?) 이 모드에서 CASE 를 사용한다면 _INSENSITIVE 로고는 유니코드 문자에 대한 대소문자 불일치를 표시합니다.기본적으로 대소문자가 민감하지 않은 일치는 US-ASCII 문자 세트에만 적용됩니다.Pattern.UNIX_LINES(?d)는 이 모드에서'한 줄의 중단으로 인식되고'.','^'와'$'와 일치합니다.공허한 개념을 버리고 다음은 몇 가지 간단한 자바 정규 용례를 적는다. ◆ 예를 들어 문자열이 검증을 포함할 때
 
// Java ,
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java ");
boolean b= matcher.matches(); // , true, false
System.out.println(b);
여러 조건으로 문자열을 분할할 때
 
Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
문자 바꾸기(문자가 처음 발생)
 
Pattern pattern = Pattern.compile("Java ");
Matcher matcher = pattern.matcher("Java Hello World, Hello World");
//
System.out.println(matcher.replaceFirst("Java"));
문자 바꾸기(모두)
 
Pattern pattern = Pattern.compile("Java ");
Matcher matcher = pattern.matcher("Java Hello World, Hello World");
//
System.out.println(matcher.replaceAll("Java"));
문자 바꾸기(문자 바꾸기)
 
Pattern pattern = Pattern.compile("Java ");
Matcher matcher = pattern.matcher("Java Hello World, Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
메일 주소인지 확인합니다
 
String str="[email protected]";
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
html 표시를 제거합니다
 
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href=\"index.html\"> </a>");
String string = matcher.replaceAll("");
System.out.println(string);
html에서 대응하는 조건 문자열을 찾습니다.◆ http://주소 코드 캡처
 
Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher("<a href=\"index.html\"> </a>");
if(matcher.find())
System.out.println(matcher.group(1));
}
◆ 지정된 {} 의 문자 코드를 바꿉니다
 
// url
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
buffer.append(matcher.group());
buffer.append("\r
");
System.out.println(buffer.toString());
}
◆ 정규 조건으로 지정한 디렉터리 아래 파일 코드를 조회합니다
 
String str = "Java {0} -{1} ";
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[] object) {
String temp=sourceString;
for(int i=0;i<object.length;i++){
String[] result=(String[])object[i];
Pattern pattern = Pattern.compile(result[0]);
Matcher matcher = pattern.matcher(temp);
temp=matcher.replaceAll(result[1]);
}
return temp;
}
자바 정규 표현식의 기능은 아직도 매우 많은데 사실상 문자 처리라면 정규가 할 수 없는 일이 없다.

좋은 웹페이지 즐겨찾기