JavaRush /Java Blog /Random-KO /Java의 정규 표현식
terranum
레벨 28
Milan

Java의 정규 표현식

Random-KO 그룹에 게시되었습니다
정규식정규식은 텍스트(Java의 문자열)에 적용할 수 있는 일종의 패턴입니다. Java는 정규식 일치를 위해 java.util.regex 패키지를 제공합니다. 정규식은 Perl 프로그래밍 언어와 매우 유사하며 배우기가 매우 쉽습니다. 정규식은 텍스트(텍스트의 일부)와 일치하거나 일치하지 않습니다. * 정규식이 텍스트와 일치하면 찾을 수 있습니다. ** 정규식이 복합형인 경우 정규식의 어느 부분이 텍스트의 어느 부분과 일치하는지 쉽게 파악할 수 있습니다.

첫 번째 예

정규식 " [a-z] +"은 텍스트의 모든 소문자와 일치합니다. 에서 포함된 [a-z]문자를 의미하며 "하나 이상의" 문자를 의미합니다. "code 2 learn java tutorial"이라는 문자열을 제공한다고 가정해 보겠습니다. Java에서 이를 수행하는 방법 먼저 템플릿을 생성해야 합니다. az+
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
matcher다음으로 다이어그램에 메시지를 보내 텍스트를 생성해야 합니다 .
Matcher m = p.matcher(“code 2 learn java tutorial”);
참고:Pattern 생성자 도 없으며 Matcher클래스 메서드를 사용하여 생성합니다 Pattern. Pattern Class:클래스 객체는 정규 표현식의 표현을 구성합니다. Pattern 클래스는 공개 생성자를 제공하지 않습니다. 템플릿을 만들려면 먼저 공용 정적 메서드 중 하나를 호출해야 합니다. 그런 다음 클래스의 개체를 반환합니다 Pattern. 이러한 메서드는 정규식을 인수로 사용합니다. Matcher Class:Finder 개체는 패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 엔진입니다. Pattern클래스와 마찬가지로 Matcher공개 생성자가 없습니다. 클래스 객체에 대한 Matcher메소드를 호출하여 객체를 얻습니다 . 이러한 단계를 완료하고 이제 클래스의 인스턴스를 갖게 되면 이제 패턴이 발견되었는지 여부와 발견된 경우 어떤 위치에 있는지 등을 확인할 수 있습니다. 패턴이 전체 문자열과 일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다. 패턴이 문자열의 시작 부분과 일치하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 패턴이 텍스트의 일부와 일치하면 true를 반환합니다. matcherPatternMatcher m m.matches()m.lookingAt()m.find ()

일치하는 항목 찾기

일치에 성공한 후 m.start()는 일치된 첫 번째 문자의 인덱스를 반환하고 m.end()는 일치된 마지막 문자의 인덱스에 1을 더한 값을 반환합니다. 시도가 실패하고 일치하는 항목이 발견되지 않으면 m.start()해당 항목을 m.end()던집니다 .IllegalStateException
  • 이렇게 하면 RuntimeException잡을 필요가 없습니다.
마지막으로 일치하는 문자에 1을 더한 인덱스를 반환하는 것이 이상하게 보일 수 m.end()있지만 이것이 바로 대부분의 String.
  • 예를 들어,“Now is the time“.substring(m.start(), m.end())
동일한 문자열을 반환합니다. 코드를 살펴보겠습니다.
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

추가 방법

일치하는 항목이 있으면 다음을 수행합니다.
  • m.replaceFirst(replacement)패턴과 일치하는 첫 번째 하위 문자열이 다음으로 대체되는 새 문자열을 반환합니다.replacement
  • m.replaceAll(replacement)패턴과 일치하는 각 하위 문자열이 대체되는 새 문자열을 반환합니다.
  • m.find(StartIndex)지정된 인덱스에서 시작하여 다음 일치 항목을 찾습니다.
  • m.reset()템플릿을 재설정합니다.
  • m.reset(NewText)파인더를 재설정하고 새 텍스트를 제공합니다(아마도 String또는 StringBuffer) CharBuffer.

정규식 구문

  • ^줄의 시작 부분과 일치합니다.
  • $문자열의 끝과 일치합니다.
  • .개행 문자를 제외한 모든 단일 문자와 일치합니다. m 옵션을 사용하면 개행 문자와 일치할 수 있습니다.
  • [...]괄호 안의 단일 문자와 일치합니다.
  • [^ ...]괄호 안에 있지 않은 모든 단일 문자와 일치합니다.
  • \A전체 라인을 시작하십시오.
  • \z전체 줄의 끝입니다.
  • \Z마지막 줄 종결자를 제외한 전체 줄의 끝입니다.
  • re*이전 표현식이 0개 이상 일치합니다.
  • re+이전 표현식과 하나 이상 일치합니다.
  • re?0 또는 1을 이전 표현식의 위치와 일치시킵니다.
  • re{n}정확히 일치합니다. N 이전 표현식의 발생 횟수입니다.
  • re{n,}N개 이상의 이전 표현식과 일치합니다.
  • re{n, m}이전 표현식의 n개 이상, 최대 m개 항목과 일치합니다.
  • a|ba 또는 b와 일치합니다.
  • (re)정규식 그룹과 발견된 텍스트를 기억합니다.
  • (?: re)발견된 텍스트를 기억하지 못하는 정규식 그룹입니다.
  • (?> re)반환값이 없는 독립 패턴과 일치합니다.
  • \w문자 및 숫자[a-zA-Z_0-9]와 일치합니다.
  • \W문자나 숫자가 아닙니다.
  • \s공백과 일치합니다. [\t\n\r\f]와 동일합니다.
  • \S공백 문자가 아닙니다.
  • \d숫자와 일치합니다. [0-9]와 동일합니다.
  • \D숫자가 일치하지 않습니다.
  • \G마지막 경기의 포인트와 일치합니다.
  • \n개행과 일치합니다.
  • \b단어 경계에서 일치합니다.
  • \B단어 경계에 일치하지 않습니다.
  • \n, \t, etc.개행, 캐리지 리턴, 탭 등의 문자.
  • \Q\E 앞의 모든 문자를 인용합니다.
  • \E\Q로 시작하는 인용문은 끝납니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION