머리말
이 기사는 Java 정규 표현식으로 패턴 클래스 및 매칭 클래스를 소개합니다. 우선, 문자열로 지정된 정규 표현식이 먼저 패턴 클래스의 인스턴스로 컴파일되어야한다는 것을 명확하게 이해해야합니다. 따라서이 두 클래스를 더 잘 이해하는 방법은 프로그래머가 알아야 할 것입니다.
이 두 범주를 살펴 보겠습니다.
1. 캡처 그룹의 개념
캡처 그룹은 왼쪽에서 오른쪽으로 개방형 브래킷을 계산하여 번호를 매겨 질 수 있습니다. 예를 들어, 표현식 ((a) (b (c)))에는 4 가지 그룹이 있습니다.
1 (a) (b (c))) 2 (a) 3 (b (c)) 4 (c)
그룹 0은 항상 전체 표현을 나타냅니다. (?)로 시작하는 그룹은 텍스트를 캡처하지 않고 콤보 카운트에 포함되지 않는 순수한 캡처 그룹입니다.
그룹과 관련된 캡처 입력은 항상 가장 최근에 그룹과 일치하는 후속입니다. 양자화로 인해 그룹이 다시 계산되면, 이전에 포착 된 값은 두 번째 계산 실패 (있는 경우)에서 유지됩니다. 예를 들어, 문자열 "aba"를 표현식 (a (b)?)+에 일치 시키면 두 번째 그룹을 "b"로 설정합니다. 각 경기가 시작될 때, 캡처 된 모든 입력은 폐기됩니다.
2. 패턴 및 매칭 클래스에 대한 자세한 설명
Java 정규식은 Java.util.regex 패키지에서 Pattern Class 및 Matcher Class를 통해 구현됩니다 (이 기사를 읽을 때 Java API 문서를 열는 것이 좋습니다. 소개 된 방법을 소개 할 때 Java API에서 메소드 설명을 확인하면 효과가 더 좋을 것입니다).
패턴 클래스는 정규 표현식을 만드는 데 사용되거나 일치하는 패턴을 생성한다고 말할 수 있습니다. 생성자는 비공개이며 직접 생성 할 수는 없지만 Pattern.complie(String regex)
Java 코드 예 :
패턴 p = pattern.compile ( "// w+"); p.pattern (); // return/w+
pattern() 정규 표현식의 문자열 형식을 반환합니다. 실제로 Pattern.complile(String regex) 의 Regex 매개 변수입니다.
1.pattern.split (charsequence input)
패턴에는 split(CharSequence input) 메소드가 있으며,이 방법은 문자열을 분리하고 문자열을 반환하는 데 사용됩니다 []. String.split(String regex) Pattern.split(CharSequence input) 을 통해 구현 된 것 같습니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); String [] str = p.split ( "내 QQ는 : 456456 내 전화는 다음과 같습니다. 0532214 내 이메일은 다음과 같습니다. [email protected]");
결과 : str [0] = "내 QQ는 :"str [1] = "내 전화는 :"str [2] = "내 이메일은 : [email protected]입니다."
2. Pattern.Matcher (String Regex, CharSevence Input)는 문자열을 빠르게 일치시키는 데 사용되는 정적 메소드입니다. 이 방법은 한 번만 일치시키고 모든 문자열과 일치하는 데 적합합니다.
Java 코드 예 :
Pattern.matches ( "// d+", "2223"); // true pattern.matches ( "// d+", "2223aa"); // 거짓을 반환하기 위해 모든 문자열이 맞추기 위해 일치해야합니다.
3.pattern.matcher (char equence input)
너무 많이 말한 후 마침내 경기자 클래스가 데뷔 할 차례입니다. Pattern.matcher(CharSequence input) 매치 자 개체를 반환합니다.
매칭 클래스의 생성자 메소드도 비공개이며 마음대로 생성 할 수 없습니다. Pattern.matcher(CharSequence input) 메소드를 통해서만이 클래스의 인스턴스 만 얻을 수 있습니다.
패턴 클래스는 간단한 일치 작업 만 수행 할 수 있습니다. 더 강력하고 편리한 정기적 인 일치 작업을 얻으려면 패턴 및 매칭 자와 협력해야합니다. 경기자 클래스는 정규 표현식에 대한 그룹 지원 및 정규식에 대한 다중 일치 지원을 제공합니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); 매치 자 m = p.matcher ( "22bb23"); m.pattern (); // return p는 매치 자 개체에서 생성 된 패턴 객체를 반환합니다.
4.matcher.matches ()/matcher.lookingat ()/matcher.find ()
경기자 클래스는 세 가지 일치하는 작업 방법을 제공합니다. 세 가지 방법 모두 부울 유형을 반환합니다. 경기에 도달하면 True를 반환하십시오. 일치가 없으면 거짓을 반환합니다.
matches() 전체 문자열과 일치하고 전체 문자열이 일치하는 경우에만 True를 반환합니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); 매치 자 m = p.matcher ( "22bb23"); m.matches (); // bb는/d+와 일치 할 수 없으므로 전체 문자열이 실패하지 않기 때문에 false를 반환합니다. 매치 자 M2 = p.matcher ( "2223"); /d+가 전체 문자열과 일치하기 때문에 m2.matches (); // return true를 반환합니다
Pattern.matcher(String regex,CharSequence input) 를 다시 살펴 보겠습니다. 다음 코드와 동등합니다.
Pattern.compile(regex).matcher(input).matches()
lookingAt() 이전 문자열과 일치하며 일치하는 문자열이 전면에있는 경우에만 True를 반환합니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); 매치 자 m = p.matcher ( "22bb23"); m.lookingat (); // // return true,/d+는 이전 22 경기자 m2 = p.matcher ( "AA2223")와 일치하기 때문에 true를 반환합니다. m2.lookingat (); // 거짓을 반환합니다./d+는 이전 AA와 일치 할 수 없기 때문입니다
find() 문자열과 일치하면 일치하는 문자열이 어디에나있을 수 있습니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); 매치 자 m = p.matcher ( "22bb23"); M.Find (); // True Matcher M2 = P.Matcher를 반환합니다 ( "AA2223"); m2.find (); // true matcher m3 = p.matcher ( "aa2223bb"); m3.find (); // true matcher m4 = p.matcher ( "aabb"); m4.find (); // 거짓을 반환합니다
5.mathcer.start ()/matcher.end ()/matcher.group ()
matches() , lookingAt() 및 find() 사용하여 일치하는 작업을 수행하면 위의 세 가지 방법을 사용하여 자세한 정보를 얻을 수 있습니다.
start() 문자열에서 일치하는 하위 문자의 인덱스 위치를 반환합니다.
end() 문자열에서 일치하는 하위 문자의 마지막 문자의 인덱스 위치를 반환합니다.
group() 일치하는 하위 문자열을 반환합니다
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); MATCHER M = P.MATCHER ( "AAA2223BB"); M.Find (); // match 2223 M.Start (); // return 3 M.End (); // return 7, 2223 이후의 인덱스 번호 M.group (); // return 2223 Mathcer M2 = M.Matcher ( "2223BB"); M.LOWINGAT (); // 일치 2223 M.Start (); // return 0, lookingAt ()는 이전 문자열과 일치 할 수 있기 때문에 Looking ()를 사용할 때 일치 할 때 start () 메소드는 항상 0 M.end ()를 반환합니다. // return 4 m.group (); // 반환 2223 매칭 M3 = M.Matcher ( "2223BB"); m.matches (); // 전체 문자열과 일치합니다 M.Start (); // 반환 0, 나는 모든 사람이 M.end ()를 알고 있다고 생각합니다. // 반환 6, 나는 모든 문자열 m.group (); // 2223BB를 반환합니다
너무 많이 말하면서, 나는 모든 사람들이 위의 방법의 사용을 이해한다고 믿는다. 우리는 Java에서 정규 표현 그룹화가 어떻게 사용되는지에 대해 이야기해야합니다.
start() , end() 및 group() 이들은 그룹 운영을 위해 특별히 start(int i) , end(int i) , group(int i) 입니다. Mathcer 클래스에는 또한 그룹이 몇 개있는 수를 반환 할 groupCount() 가 있습니다.
Java 코드 예 :
패턴 p = pattern.compile ( "([az]+) (// d+)"); MATCHER M = P.MATCHER ( "AAA2223BB"); m.find (); // 일치 AAA2223 M.groupCount (); // M.Start (1)의 2 개 그룹이 있기 때문에 2; // return 0 문자열에서 일치하는 하위 문자열의 첫 번째 그룹의 색인 번호를 반환합니다 (2); // 3 M.End (1)을 반환합니다. // 리턴 3은 문자열에서 일치하는 하위 문자열의 첫 번째 문자의 인덱스 위치를 반환합니다. M.End (2); // 7 M.Group (1)을 반환합니다. // AAA를 반환하고 일치하는 하위 문자열의 첫 번째 그룹 M.Group (2)을 반환합니다. // 2223을 반환하고 일치하는 두 번째 하위 문자열 세트를 반환합니다
이제 약간 더 높은 수준의 일반 일치 작업을 사용해 보겠습니다. 예를 들어, 많은 숫자가있는 텍스트가 있으며이 숫자는 분리됩니다. 이제 텍스트의 모든 숫자를 꺼내야합니다. Java 정규 작업을 사용하는 것은 매우 간단합니다.
Java 코드 예 :
Pattern P = Pattern.compile ( "// d+"); MATCHER M = P.MATCHER ( "내 QQ IS : 456456 내 전화는 다음과 같습니다. 0532214 내 이메일은 다음과 같습니다. [email protected]"); while (m.find ()) {system.out.println (m.group ()); }
산출:
456456 0532214 123
위의 while() 루프를 교체하는 경우
while (m.find ()) {system.out.println (m.group ()); System.out.print ( "시작 :"+m.start ()); System.out.println ( "end :"+m.end ()); }그런 다음 출력 :
456456 시작 : 6 종료 : 12 0532214 시작 : 19 종료 : 26 123 시작 : 36 끝 : 39
이제 모든 일치하는 작업 후에는 세 가지 메소드 start() , end() 및 group() 의 값이 변경되고 일치하는 하위 문자의 정보로 변경되며 해당 정보로 변경 될 것임을 알아야합니다.
참고 : 일치하는 작업이 성공할 때만 세 가지 java.lang.IllegalStateException start() , matches() end() lookingAt() group() find() 을 사용할 수 있습니다.
요약
위는이 기사의 모든 내용입니다. 이 기사의 내용이 귀하의 연구 나 업무에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.