우리 모두가 알고 있듯이 프로그램 개발에서 문자열이 일치하고 검색, 교체 및 판단 해야하는 상황을 만나는 것은 불가피합니다. 이러한 상황은 때때로 더 복잡합니다. 순수한 인코딩으로 해결되면 종종 프로그래머의 시간과 에너지를 낭비합니다. 따라서 정규 표현을 배우고 사용하는 것이 이러한 모순을 해결하는 주요 수단이되었습니다.
우리 모두 알다시피, 정규식은 패턴 매칭 및 교체에 사용할 수있는 사양입니다. 정규 표현식은 일반적인 캐릭터 (예 : 문자 A에서 Z) 및 특수 문자 (Metacharacters)로 구성된 문자 패턴입니다. 그것은 문자의 몸을 검색 할 때 일치 할 하나 이상의 현을 설명하는 데 사용됩니다. 정규 표현식은 검색 된 문자열과 문자 패턴을 일치시키는 템플릿 역할을합니다.
JDK1.4가 java.util.regex 패키지를 출시 했으므로 좋은 Java 정규식 응용 프로그램 플랫폼을 제공했습니다.
정규 표현식은 매우 복잡한 시스템이기 때문에 입문 개념의 몇 가지 예만 제공 할 것입니다. 자세한 내용은 관련 서적을 참조하고 직접 탐색하십시오.
// BackSlash
/t 간격 ( '/u0009')
/n 라인 브레이크 ( '/u000a')
/r Enter ( '/u000d')
/d 숫자는 [0-9]와 같습니다.
/d 비 자극은 [^0-9]와 동일합니다.
/s 빈 심볼 [/t/n/x0b/f/r]
/s 비-빈 기호 [^/t/n/x0b/f/r]
/w 개인 문자 [a-za-z_0-9]
/w 비 개인 문자 [^a-za-z_0-9]
/f 페이지 브레이크
/E 탈출
/b 단어의 경계
/b 비 단어 경계
/g 이전 경기의 끝
^ 제한으로 시작합니다
^Java 조건 제한은 Java로 시작하는 문자입니다
$는 한계의 끝입니다
Java $ 조건 제한은 Java-End 문자입니다
. 조건부는 /n을 제외한 단일 문자를 제한합니다
Java .. 조건 제한 이후 Java, Newline을 제외한 두 문자
"[]"특정 제한 사항 추가
[AZ] 조건은 소문자 A에서 Z 범위의 문자로 제한됩니다.
[AZ] 조건은 대문자 A에서 Z 범위의 하나의 문자로 제한됩니다.
[a-za-z] 조건은 소문자 A에서 z 또는 대문자 A에서 Z 범위의 문자로 제한됩니다.
[0-9] 조건은 소문자 0 ~ 9 범위의 한 문자로 제한됩니다.
[0-9A-Z] 조건은 소문자 0 ~ 9 또는 A ~ Z 범위로 제한됩니다.
[0-9 [az]] 조건은 소문자 0 ~ 9 또는 A ~ Z 범위 (교차)로 제한됩니다.
[] 제한 조건 "[^]"을 다시 추가하십시오
[^az] 조건은 비 선수 케이스 a to z의 범위의 문자로 제한됩니다.
[^az] 조건 조건은 비 캡 a ~ z 범위의 한 문자를 제한합니다.
[^a-za-z] 조건은 비 층 가방 A에서 z 또는 대문자 범위의 문자로 제한됩니다.
[^0-9] 조건은 0 ~ 9의 비 항공기 범위에서 하나의 문자로 제한됩니다.
[^0-9A-Z] 조건은 0 ~ 9 또는 a ~ z의 비 노하 케이스 범위의 문자로 제한됩니다.
[^0-9 [az]] 조건은 0 ~ 9 또는 a ~ z (교차) 범위의 문자로 제한됩니다.
제한 조건이 특정 문자가 0 번 이상 나타나는 경우 "*"를 사용할 수 있습니다.
J* 0 이상 j
.* 위의 모든 문자
J.*DJ 및 D 0 자
제한 조건이 특정 문자가 두 번 이상 나타나는 경우 "+"를 사용할 수 있습니다.
J+ 1 이상의 J.
.+ 1 개 이상의 임의의 문자
J.+1 이상의 DJ와 d
제한 조건이 특정 문자가 0 번 이상 나타나는 경우 "?" 사용할 수 있습니다.
JA? J 또는 JA가 나타납니다
지정된 숫자 문자의 연속 발생 제한 "{a}"
J {2} JJ
J {3} JJJ
텍스트 이상, "{a,}"
J {3,} jjj, jjjjj, jjjjj, ???
B "{a, b}보다 작은 텍스트 이상의 텍스트
j {3,5} jjj 또는 jjjj 또는 jjjjj
둘 중 하나를 가져 가십시오
j | aj 또는 a
Java | 안녕하세요 Java 또는 안녕하세요
"()"예를 들어 <a href =/"index.html/"> index 사이의 데이터를 쿼리하면 <a.*href =/".*/"> (.+?) </a>를 쓸 수 있습니다.
pattern.compile 함수를 사용할 때는 정규 표현식의 일치하는 동작을 제어하는 매개 변수를 추가 할 수 있습니다.
Pattern Pattern.compile (String Regex, Int Flag)
플래그 값의 범위는 다음과 같습니다.
Pattern.canon_eq 두 문자의 "표준 분해"가 정확히 동일 한 경우에만 경기가 결정됩니다. 예를 들어,이 플래그를 사용한 후 "A/U030A"표현이 ""일치합니까? " 기본적으로 "표준 평등"은 고려되지 않습니다.
Pattern.case_insensive (? i) 기본적으로 Case-Unidentified Matching은 US-ASCII 문자 세트에만 사용할 수 있습니다. 이 플래그를 사용하면 표현식이 일치하는 경우를 무시할 수 있습니다. 유니 코드 문자를 알려지지 않은 크기로 일치 시키려면이 플래그와 유니 코드 케이스를 결합하십시오.
Pattern.comments (? x)이 모드에서는 공간 문자 (정규 표현식)는 일치 할 때 무시됩니다 (번역기 주 : 표현식에서 "//"를 참조하지 않고 표현의 공백, 탭, 운송 반환 등을 나타냅니다). 주석은 #에서 시작 하여이 줄에서 끝납니다. Unix 행 모드는 내장 플래그를 통해 활성화 할 수 있습니다.
Pattern.dotall (? s)이 모드에서 표현식 '.' 선을 나타내는 결말 문자를 포함하여 모든 캐릭터와 일치 할 수 있습니다. 기본적으로 표현식 '.' 라인의 결말 문자와 일치하지 않습니다.
패턴 .multiline
(? m)이 모드에서 '^'및 '$'는 각각 행의 시작과 끝과 일치합니다. 또한 '^'은 여전히 문자열의 시작과 일치하며 '$'는 문자열의 끝과 일치합니다. 기본적 으로이 두 표현식은 문자열의 시작과 끝에만 일치합니다.
Pattern.unicode_case
(? u)이 모드에서는 case_insensive 플래그를 활성화하면 유니 코드 문자와 알 수없는 경우와 일치합니다. 기본적으로 Case-Insensitive Matching은 US-ASCII 문자 세트에만 사용할 수 있습니다.
Pattern.unix_lines (? d)이 모드에서는 '/n'만이 선과 일치의 중단으로 간주됩니다. ','^'및'$ '.
빈 개념을 제쳐두고 다음은 몇 가지 간단한 Java 일반 사용 사례가 있습니다.
◆ 예를 들어, 문자열에 확인이 포함 된 경우
// Java로 시작하여 will에서 끝나는 문자열을 찾아 패턴 = pattern.compile ( "^java.*"); MATCHER MATCHER = PANTERT.MATCHER ( "Java는 인간이 아닙니다"); 부울 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.out.out.out.out.println (strs [i]);} ◆ 텍스트 교체 (캐릭터가 처음으로 나타납니다)
Pattern Pattern = Pattern.compile ( "정규 표현"); MATCHER MATCHER = PANTERT.MATCHER ( "정규 표현식 Hello World, Regement Expression Hello World"); // 규칙적 시스템을 준수하는 첫 번째 데이터를 교체합니다.
◆ 텍스트 교체 (모두)
Pattern Pattern = Pattern.compile ( "정규 표현"); MATCHER MATCHER = PANTERT.MATCHER ( "정규 표현식 Hello World, Regement Expression Hello World"); // 규칙적 시스템을 준수하는 첫 번째 데이터를 교체합니다.
◆ 텍스트 교체 (문자 교체)
Pattern Pattern = Pattern.comPile ( "정규 표현"); 매치 자 매칭 자 = Pattern.Matcher ( "정규 표현식 Hello World, Regement Expression 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 //-] +/..//-]+", Pattern.case_insensitive); Matcher Matcher = Pattern.matcher (str); matcher.match.matches ();
◆ HTML 태그를 제거하십시오
Pattern Pattern = Pattern.comPile ( "<.+?>", Pattern.Dotall); 매치 자 매칭 자 = Pattern.Matcher ( "<a href =/"index.html/"> home </a>"); String String = matcher.replaceall ( "); System.out.println (String);
◆ HTML에서 해당 조건 문자열을 찾으십시오
Pattern Pattern = Pattern.comPile ( "href =/"(.+?)/""); matcher matcher = pattern.matcher ( "<a href =/"index.html/"> home </a>"); if (matcher.find ()) system.out.println (matcher.group (1));}
◆ 절편 http : // 주소
// UrlPattern Pattern = Pattern.compile ( "(http : // | https : //) {1} [//w/.//-/ :]+"); 매치 자 매칭 자 = Pattern.matcher ( "dsdsds <http : // dsds // gfgffdfd> fdf"; while (matcher.find ()) {buffer.append (matcher.group ()); buffer.append ( "/r/n"); System.out.println (buffer.toString ());}◆ 지정된 {} 중국어를 교체하십시오
String Str = "Java의 현재 개발 기록은 {0} 년 - {1} 년"; String [] [] 객체 = {new String [] { "// {0 //}", "1995"}, new String [] { "// {1 //}", "2007"}} (string (strat.out.out.out.println); sourcestring, object [] object) {string temp = sourcestring; for (int i = 0; i <object.length; i ++) {string [] result = (string []) 객체 [i]; Pattern Pattern = Pattern.comPile (결과 [0]); 매치기 매치 자 = Pattern.Matcher (Temp); temp = matcher.replaceall (결과 [1]); } 반환 온도;}◆ 규칙적인 조건이있는 지정된 디렉토리의 파일 쿼리
// 파일 목록을 캐시하는 데 사용되는 개인 ArrayList files = new ArrayList (); // 파일 경로를 호스트하는 데 사용되는 개인 문자열 _path; // Unmerged 일반 공식을 호스팅하는 데 사용됩니다. 개인 문자열 _regexp; 클래스 myFileFilter는 fileFilter { / *** 일치 파일 이름* / public boolean accept (파일 파일) {try {Pattern Pattern = Pattern.comPile (_regexp); 매치 자 match = pattern.matcher (file.getName ()); return match.matches (); } catch (예외 e) {return true; }}} / *** 입력 스트림 분석* @param inputs* / filesanalyze (문자열 path, String regexp) {getFilename (path, regexp); } /** * 파일 이름을 분석하고 파일 추가 * @param input * /private void getFilename (문자열 path, String regexp) {// directory_path = path; _regexp = regexp; 파일 디렉토리 = 새 파일 (_path); file [] filesfile = directory.listfiles (new MyFileFilter ()); if (filesfile == null) 반환; for (int j = 0; j <filesfile.length; j ++) {files.add (filesfile [j]); } 반품; } / *** 출력 정보 표시* @param out* / public void print (printstream out) {iterator elements = files.iterator (); while (elements.hasnext ()) {file file = (file) elements.next (); out.println (file.getPath ()); }} public static void output (문자열 path, String regexp) {filesAnalyze fileGroup1 = new FilesAnalyze (path, regexp); FileGroup1.Print (System.out); } public static void main (String [] args) {output ( "c : //", "[az |.]*"); }Java 규칙에 대한 많은 기능이 있습니다. 사실, 캐릭터 처리 인 한 규칙이 할 수없는 것은 없습니다. (물론 정기적으로 설명하는 데 많은 시간이 걸립니다 ||| ...)
위는 Java 정규 표현식을 분류하는 정보입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!