Latest web development tutorials

자바 정규 표현식

정규 표현식은 패턴 문자열을 정의합니다.

정규 표현식은 검색, 편집, 또는 처리 텍스트하는 데 사용할 수 있습니다.

정규 표현은 특정 언어에 한정되지 않고, 각 언어에 미묘한 차이가있다.

자바 정규 표현식과 펄이 가장 유사하다.

java.util.regex의 패키지는 다음 세 가지 범주를 포함한다 :

  • 패턴 카테고리 :

    개체 패턴은 정규 표현식 컴파일러 표현입니다. 패턴 클래스에는 public 생성자가 없습니다. 패턴 (Pattern) 개체를 만들려면 먼저 패턴 객체를 반환 공공 정적 컴파일 메서드를 호출해야합니다. 이 방법은 첫 번째 인수로 정규 표현식을합니다.

  • 정규 카테고리 :

    정합 목적은 엔진의 입력 문자열의 해석과 일치하는 동작이다. 패턴 클래스와 마찬가지로 정규 표현은 public 생성자가 없습니다. 당신은 정규 객체를 얻는 방법 패턴 정규 객체를 호출해야합니다.

  • PatternSyntaxException :

    PatternSyntaxException 정규 표현식 패턴 구문 오류를 나타내는 비 필수 예외 클래스입니다.


캡처 그룹

괄호 안에 그룹화 문자 통해 단일 유닛 처리 방법을 만들 때 캡처 기는 여러 문자이다.

예를 들어, 일반 식 (개)를 하나의 그룹, "D", "O"을 포함하는 그룹, 및 "g"를 생성한다.

왼쪽에서 오른쪽으로 번호가 오픈 괄호를 계산하여 캡처 그룹입니다. 예를 들어, 식 ((A) (B (C))), 네 개의 기는있다 :

  • ((A) (B (C)))
  • (A)
  • (B (C))
  • (C)

얼마나 많은 패킷 식을 볼 수있는 정규 객체 groupCount 방법을 호출하여. groupCount 방법은 정규 객체 현재 여러 캡처 그룹이를 나타내는 int를 돌려줍니다.

(그룹 0)은 항상 전체 표현식을 나타내는 특수 그룹이있다. 그룹은 groupCount 반환 값에 포함되지 않습니다.

다음의 예는 주어진 문자열에서 숫자의 문자열을 검색하는 방법을 보여줍니다

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

정규 표현식 구문

문자

설명

\

다음 문자는 특수 문자, 텍스트, 백 참조 또는 진수 이스케이프로 표시됩니다. 예를 들어, "n"은 문자 "n"을 일치합니다. "\ N"은 개행 문자와 일치합니다. 시퀀스 "\\"일치 "\", \ "("일치 "(."

^

입력 문자열이 시작 일치합니다. 당신은여러 줄 속성 정규식개체 일치하는 위치와 후도 ^ \ "의 n"또는 "\ r"로 설정합니다.

$

문자열 위치의 입력 끝을 맞 춥니 다.Multiline속성 경우도 $ 전에 "\ n을"또는 "\ r"위치와 일치합니다.

*

0 번 이상은 앞의 문자 나 하위 식을 일치합니다. 예를 들어, ZO * '는 "z", "zoo"와 일치합니다. * {0,}와 같습니다.

+

한 번 이상 선행 문자 또는 하위 식을 일치합니다. 예를 들어, "ZO +"및 "ZO"및 "동물원"일치하지만, "Z"와 일치하지 않는다. + {1}에 동일합니다.

?

0 또는 1의 선행 문자 또는 하위 식을 일치합니다. 예를 들어, "(들)는 무엇입니까?"를 "어떻게"또는 "하지"에서 "어떻게"를 찾습니다. ? 동등한 {0,1}합니다.

{N}

n은음이 아닌 정수입니다. 정확히n번 일치합니다. 예를 들어, "O는 {2}"및 "O"에 "밥"와 일치하지 않지만, 두 개의 "O"매치의 "음식".

{N}

n은음이 아닌 정수입니다. 경기n번 이상. 예를 들어, "오 {2}"는 "오"와 일치 "foooood"의 모든 오의 "밥"과 일치하지 않습니다. "O {1}", "오 +"에 해당합니다. "O {0}", "오 *"에 해당합니다.

{N,m}

M및 음이 아닌정수, N,N <= m. 경기 최소한n 가장m의 시간에. 예를 들어, 처음 세 오의 "오 {1,3}"은 "fooooood". 'O {0,1}'에 해당 '오?'. 참고 : 쉼표와 숫자 사이에 공백을 삽입 할 수 없습니다.

?

문자는 다른 규정에 따라시 (*, +,?, { N이}, {N}, {N, m은}) 후, 일치하는 패턴이 "비 욕심"입니다. "비 욕심"가능한 짧은 문자열을 검색하는 패턴 매칭, 가능한 긴 문자열을 검색 일치하는 기본 "욕심"패턴입니다. 예를 들어,에서 문자열 "OOOO"의 "오 +?"단 하나의 "O"및 "오 +" "O"모든 일치 일치합니다.

.

제외한 모든 단일 문자와 일치 "\ r에 \ n"입니다. 이러한 사용 패턴 "[\ S \ S]"등의 문자 중 하나를 포함하는 "\ 연구 \ 없음"을 포함 일치합니다.

(패턴)

패턴매칭과 경기의 캡처 표현식. 당신은 캡처 검색 할0 $ ... $ (9) 속성이 "일치"컬렉션의 결과와 일치 사용할 수 있습니다."("\. 나) "\"를 사용, 괄호 문자 ()를 일치 시키려면

(? :패턴)

패턴과일치하지만 비 캡처 일치 일치 표현식을 포착하지 않는 일치는 나중에 사용하기 위해 저장되지 않습니다. (|) 조합 모드 구성 요소 유용이 사용 "또는"문자입니다. 예를 들어 : 공업 '경제적 식 | | 업계 산업용 (? Y IES)의 비율이다.'

(?= 패턴)

식 매칭의 시작점에서 제 검색 문자열패턴과일치하는 문자열이 순방향 예측을 수행하는 서브 표현식. 그것은 나중에 사용하기 위해 경기를 캡처하지 않는 비 캡처 검색입니다. 예를 들어, '윈도우 (= 95? | 98 | NT | 2000)'매칭 "윈도우 2000"의 "Windows 윈도우"에서 "윈도우 3.1" "하지만 일치하지 않습니다." 일치가 발생한 후 문자를하지 않는 내다가, 마지막 경기 후 즉시 검색을위한 다음 경기 출전하지 문자의 구성에서 첫 번째 예측 후.

(?!패턴)

역방향 검색을 수행 룩어 서브 표현식은 표현식 검색 문자열의 시작 위치에 일치하는 문자열패턴과일치하지 않는다. 그것은 나중에 사용하기 위해 경기를 캡처하지 않는 비 캡처 검색입니다. 예를 들어, '윈도우 (95 |! 98 | NT | 2000)'은 "Windows"의 "윈도우 3.1"일치하지만은 "Windows 2000"의 "Windows"를 일치하지 않습니다. 일치가 발생한 후 문자를하지 않는 내다가, 마지막 경기 후 즉시 검색을위한 다음 경기 출전하지 문자의 구성에서 첫 번째 예측 후.

X|Y

경기X또는Y.예를 들어, "z | food"는 "z"또는 "음식"과 일치합니다. '(Z | f)의 짐 우드'일치 "zood"또는 "음식".

[XYZ]

문자를 설정합니다. 모든 문자가 포함 일치합니다. 예를 들어, "[abc 방송은]"는 "A"에서 "일반"일치합니다.

[^XYZ]

역 문자 세트. 모든 문자가 포함되지 일치합니다. 예를 들어, "[^ abc 방송은]" "I", "N", "L"은 "페이지"에서 "일반"일치합니다.

[아즈]

문자의 범위. 지정된 범위 내의 모든 문자를 찾습니다. 예를 들어, "[az]와"일치 "는"은 "Z"의 범위에있는 모든 소문자로.

[^아즈]

문자의 역 범위. 하지 않고 지정된 범위 내에서 모든 문자를 찾습니다. 예를 들어, "[^ AZ]"에 대한 일치하는하지의 ""를 "Z"범위의 모든 문자에.

\ B

인 단어 경계, 단어의 위치와 사이의 공간을 일치합니다. 예를 들어, "어 \ B는" "어"의 "절대"와 일치하지 않지만 "어"의 "동사"를 일치하지 않습니다.

\ B

비 단어 경계와 일치합니다. "어 \ B"는 "어"의 "동사"와 일치하지만 "결코" "어"에 일치하지 않습니다.

\C X

경기 제어 문자는x로 표시.예를 들어, \ CM은 제어-M 또는 캐리지 리턴과 일치합니다.x의값은 AZ 또는 AZ 사이 여야합니다. 없는 경우, C는 "C"자 자체가 있음을 가정한다.

\ D

숫자를 매칭. 등가 [0-9]로 제한해야한다.

\ D

숫자가 아닌 문자와 일치합니다. 그것은 [^ 0-9]와 동일합니다.

\ F

폼 피드 일치합니다. \의 x0c와 \ CL 같습니다.

\ N

줄 바꿈을 맞 춥니 다. 동등한 X0A를 \와 CJ를 \ 수 있습니다.

\ R

캐리지 리턴과 일치합니다. X0D 및 \ CM을 \ 같습니다.

\ S

등의 공백, 탭, 페이지 나누기를 포함한 모든 공백 문자를 일치 상당에 [\ F \ 없음 \ 연구 \ t \ V]입니다.

\ S

비 공백 문자와 일치합니다. 상당 [^ \ F \ 없음 \ 연구 \ t \ V]입니다.

\ T

경기 탭을 클릭합니다. \의 X09과 \ CI에 해당합니다.

\ V

수직 탭 문자를 찾습니다. 그리고 \의 X0B와 \의 CK 상당.

\ W

밑줄을 포함한 모든 문자 클래스 문자를 일치합니다. 그리고 "[A-만 Za-z0-9_]"와 같습니다.

\ W

비 단어 문자를 찾습니다. 그리고 "[^ A-만 Za-z0-9_]"와 같습니다.

\X n을

여기에 경기N,N- 16 진수 이스케이프 코드입니다. 진수 이스케이프 코드는 정확히 두 자리 여야합니다. 예를 들어, "\ X41"일치 "A". "\ X041"과 "\의 X04"& "1"동일합니다. 정규식에 ASCII 코드를 사용할 수 있습니다.

\

경기NUM 여기NUM은 양의 정수이다. 역 참조와 일치 캡처합니다. 예를 들어, "(.) \ 1"은 두 개의 연속 된 동일 문자와 일치합니다.

\N

진법 이스케이프 코드 또는 백 참조를 식별합니다. \는N다음, 최소한n캡처 표현식 앞에n은역 참조 경우. 그렇지 않으면,n은다음 8 진수 (0-7)이며,n은진수 이스케이프 코드 인 경우.

\Nm의

진법 이스케이프 코드 또는 백 참조를 식별합니다. 적어도nm의캡처 표현식 앞에 \nm의 후역 참조는nm의경우. 최소한n 개의캡처앞에\의나노는,n은 문자m다음에 역 참조는경우.앞의 두 경우가 존재하지 않는 경우,\nm은진수 숫자 (0-7)입니다 진수 값nm의 일치나노 미터.

\ NML

n은8 진수(0-3)경우,m 및L은NML진수 이스케이프 코드 일치 진수(0-7)이다.

\U n을

일치N, 개의 16 진수로 표현되는 유니 코드 문자이다. 예를 들어, \ u00A9는 저작권 기호 (©)를 일치합니다.

정규 클래스 메소드

색인 방법

인덱스 방법은 유용한 인덱스 값은 여기서 입력 문자열 일치를 찾을 수 정확하게 표시 제공

아니오. 방법 및 설명
(1) 공공 INT 시작 ()
이전 경기의 초기 인덱스를 돌려줍니다.
공공 INT 시작 (INT 그룹)
다시 작동 서브 시퀀스 초기 인덱스의 특정 그룹에 의해 촬영 된 전회의 매치,시
3 공공 INT 끝 ()
마지막 문자가 일치 후 오프셋 (offset)를 돌려줍니다.
4 공공 INT 엔드 (INT 그룹)
다시 작업에서 이전 경기 중, A는 촬영의 순서 후 문자의 마지막 그룹 후 지정된 오프셋 (offset)에 의해.

연구 방법

방법은 입력 문자열을 검사하는 데 사용하고, 패턴이 발견되었는지의 여부를 나타내는 부울 값을 반환

아니오. 방법 및 설명
(1) 공공 부울 lookingAt ()
입력 시퀀스의 시작 부분의 처음부터 영역이 패턴과 일치보십시오.
공공 부울 찾기 ()
다음 순서의 패턴과 일치하는 입력 순서를 찾아보십시오.
3 공공 부울 찾기 (INT 시작)
이 정규를 재설정하고, 패턴에 대한 일치하는 항목을 찾을 수 지정된 인덱스에서 시작하여 다음 서브 시퀀스를 입력하려고합니다.
4 공공 부울 경기 ()
전체 영역과 패턴 매칭을 시도합니다.

교체 방법

대체 텍스트 입력 방법에 문자열을 교체하는 것입니다 :

아니오. 방법 및 설명
(1) 공공 정규 appendReplacement (StringBuffer와의 SB, 문자열 교체)
비 종단 및 변형 공정을 달성했다.
공공 StringBuffer를 appendTail (StringBuffer와의 SB)
단말기 추가 및 대체 단계를 얻을 수 있습니다.
3 공공 문자열 대체하기 (문자열 교체)
각 시퀀스의 입력 순서에 맞게 지정된 대체 문자열로 모드를 교체합니다.
4 공공 문자열 replaceFirst라고 (문자열 교체)
제 1 서브 시퀀스의 입력 순서와 일치하는 지정된 대체 문자열로 모드를 교체합니다.
(5) 공공 정적 문자열 quoteReplacement (문자열들)
문자열 리터럴 치환 캐릭터 라인을 돌려줍니다. 이 방법은 리터럴 문자열로 appendReplacement 정규 클래스 작업을하는 방법으로 전달되는 문자열을 반환합니다.

시작 및 종료에있어서

여기에 "고양이"나타나는 단어를 카운트하는 입력 문자열의 발생 횟수의 예이다 :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

이것은 문자 "C"를 "A" "t"는 단지 긴 단어 문자열되지 않도록, 예제 단어 경계를 이용하여 알 수있다. 또한 위치를 일치 입력 스트링에 대한 유용한 정보를 제공한다.

시작 방법은 초기 인덱스 주어진 그룹 캡처 시퀀스에서 마지막 인덱스 플러스 한 문자와 일치의 방법을 종료, 이전 경기 동안 작업을 반환합니다.

일치와 lookingAt 방법

일치와 lookingAt 방법은 입력 패턴의 순서와 일치하려고하는 데 사용됩니다. 이들은 전체 시퀀스 정합 경기의 요구 상이하지만, 요구되지 lookingAt.

입력 문자열 시작에서 이러한 두 가지 방법을 주로 사용한다.

다음의 예를 통해이 기능을 설명합니다 :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "foo";
    private static final String INPUT = "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main( String args[] ){
       pattern = Pattern.compile(REGEX);
       matcher = pattern.matcher(INPUT);

       System.out.println("Current REGEX is: "+REGEX);
       System.out.println("Current INPUT is: "+INPUT);

       System.out.println("lookingAt(): "+matcher.lookingAt());
       System.out.println("matches(): "+matcher.matches());
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

replaceFirst라고 방법과 대체하기

replaceFirst라고하고 완전히 대체 방법은 텍스트 일치하는 정규 표현식을 대체하는 데 사용됩니다. 차이점은, replaceFirst라고는 모든 일치를 대체 대체하기, 첫 경기를 교체한다.

다음의 예는이 기능을 설명합니다 :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static String REGEX = "dog";
    private static String INPUT = "The dog says meow. " +
                                    "All dogs say meow.";
    private static String REPLACE = "cat";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       // get a matcher object
       Matcher m = p.matcher(INPUT); 
       INPUT = m.replaceAll(REPLACE);
       System.out.println(INPUT);
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

The cat says meow. All cats say meow.

appendReplacement 방법 및 appendTail

정합 클래스는 appendTail appendReplacement하기위한 방법을 제공하고 텍스트 대체 :

이 기능을 설명하기 위해 다음의 예를 보면 :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      // 获取 matcher 对象
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()){
         m.appendReplacement(sb,REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다

-foo-foo-foo-

PatternSyntaxException 클래스 메서드

PatternSyntaxException 정규 표현식 패턴 구문 오류를 나타내는 비 필수 예외 클래스입니다.

PatternSyntaxException 클래스는 우리가 오류가 발생했습니다을 확인하기 위해 다음과 같은 방법을 제공합니다.

아니오. 방법 및 설명
(1) 공공 문자열으로 getDescription ()
오류의 설명을 가져옵니다.
공공 INT getIndex ()
잘못된 인덱스를 가져옵니다.
3 공공 문자열 getPattern ()
잘못된 정규 표현식 패턴을 가져옵니다.
4 공공 문자열 GetMessage 함수 ()
구문 오류 및 인덱스, 잘못된 정규 표현식 패턴의 시각적 표시 및 오류 인덱스의 설명을 포함하는 여러 줄 문자열을 반환합니다.