산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 - 정규식

Java는 정규 표현식과의 패턴 일치를 위해 java.util.regex 패키지를 제공합니다. Java 정규식은 Perl 프로그래밍 언어와 매우 유사하고 배우기 쉽습니다.

정규식은 패턴에 포함된 특수 구문을 사용하여 다른 문자열이나 문자열 집합을 일치시키거나 찾는 데 도움이 되는 특수 문자 시퀀스입니다. 텍스트와 데이터를 검색, 편집 또는 조작하는 데 사용할 수 있습니다.

java.util.regex 패키지는 주로 다음 세 가지 클래스로 구성됩니다. -

그룹 캡처

그룹 캡처는 여러 문자를 단일 단위로 취급하는 방법입니다. 그룹화할 문자를 괄호 세트 안에 배치하여 생성됩니다. 예를 들어, 정규식(dog)은 "d", "o" 및 "g" 문자를 포함하는 단일 그룹을 생성합니다.

캡처 그룹은 여는 괄호를 왼쪽에서 오른쪽으로 세어 번호가 매겨집니다. 예를 들어 식 ((A)(B(C)))에는 4개의 그룹이 있습니다. -

표현식에 몇 개의 그룹이 있는지 확인하려면 matcher 객체에서 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 to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      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

정규 표현식 구문

다음은 Java에서 사용할 수 있는 모든 정규식 메타문자 구문을 나열한 표입니다.

하위 표현식 일치
^ 줄의 시작 부분과 일치합니다.
$ 줄의 끝과 일치합니다.
. 개행 문자를 제외한 모든 단일 문자와 일치합니다. m 사용 옵션을 사용하면 줄 바꿈과도 일치할 수 있습니다.
[...] 대괄호 안의 모든 단일 문자와 일치합니다.
[^...] 대괄호가 아닌 모든 단일 문자와 일치합니다.
\A 전체 문자열의 시작.
\z 전체 문자열의 끝.
\Z 허용되는 마지막 줄 종결자를 제외한 전체 문자열의 끝입니다.
재* 이전 표현식의 0개 이상의 항목과 일치합니다.
보충+ 이전 항목 중 하나 이상과 일치합니다.
다시? 이전 표현식의 0 또는 1번과 일치합니다.
재{ n} 앞의 표현식과 정확히 n번 일치합니다.
다시{n,} 이전 표현식의 n개 이상의 항목과 일치합니다.
다시{n, m} 이전 표현식의 최소 n개 및 최대 m개 항목과 일치합니다.
a| b 또는 b와 일치합니다.
(재) 정규 표현식을 그룹화하고 일치하는 텍스트를 기억합니다.
(?:다시) 일치하는 텍스트를 기억하지 않고 정규 표현식을 그룹화합니다.
(?> 다시) 역추적 없이 독립 패턴과 일치합니다.
\w 단어 문자와 일치합니다.
\W 비단어 문자와 일치합니다.
\s 공백과 일치합니다. [\t\n\r\f]와 동일합니다.
\S 공백이 아닌 것과 일치합니다.
\d 숫자와 일치합니다. [0-9]와 동일합니다.
\D 숫자가 아닌 것과 일치합니다.
\A 문자열의 시작 부분과 일치합니다.
\Z 문자열의 끝과 일치합니다. 개행이 존재하면 개행 직전과 일치합니다.
\z 문자열의 끝과 일치합니다.
\G 마지막 경기가 끝난 지점과 일치합니다.
\n 캡처 그룹 번호 "n"에 대한 역참조
\b 대괄호 밖에 있을 때 단어 경계와 일치합니다. 대괄호 안에 있을 때 백스페이스(0x08)와 일치합니다.
\B 단어가 아닌 경계와 일치합니다.
\n, \t 등 줄 바꿈, 캐리지 리턴, 탭 등과 일치합니다.
\Q \E까지의 모든 문자를 이스케이프(따옴표)합니다.
\E \Q로 시작된 인용을 끝냅니다.

매처 클래스의 메소드

다음은 유용한 인스턴스 메소드 목록입니다 -

색인 방법

인덱스 메서드는 입력 문자열에서 일치 항목이 발견된 위치를 정확하게 표시하는 유용한 인덱스 값을 제공합니다. −

Sr.No. 방법 및 설명
1

공개 int 시작()

이전 일치의 시작 인덱스를 반환합니다.

2

공개 int 시작(int 그룹)

이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 시작 인덱스를 반환합니다.

3

공개 int end()

일치하는 마지막 문자 이후의 오프셋을 반환합니다.

4

공개 int end(int 그룹)

이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 마지막 문자 뒤의 오프셋을 반환합니다.

연구 방법

연구 방법은 입력 문자열을 검토하고 패턴이 발견되었는지 여부를 나타내는 부울을 반환합니다. -

Sr.No. 방법 및 설명
1

공개 부울 lookAt()

패턴에 대해 영역의 시작 부분에서 시작하여 입력 시퀀스를 일치시키려고 시도합니다.

2

공개 부울 찾기()

패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고 시도합니다.

3

공개 부울 찾기(int 시작)

이 매처를 재설정한 다음 지정된 인덱스에서 시작하여 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고 시도합니다.

4

공개 부울 일치()

패턴에 대해 전체 영역을 일치시키려고 시도합니다.

교체 방법

교체 방법은 입력 문자열의 텍스트를 교체하는 데 유용한 방법입니다 -

Sr.No. 방법 및 설명
1

공개 Matcher appendReplacement(StringBuffer sb, 문자열 교체)

비터미널 추가 및 바꾸기 단계를 구현합니다.

2

공개 StringBuffer appendTail(StringBuffer sb)

터미널 추가 및 바꾸기 단계를 구현합니다.

3

공개 문자열 replaceAll(문자열 대체)

패턴과 일치하는 입력 시퀀스의 모든 하위 시퀀스를 주어진 대체 문자열로 바꿉니다.

4

공개 문자열 replaceFirst(문자열 대체)

패턴과 일치하는 입력 시퀀스의 첫 번째 하위 시퀀스를 주어진 대체 문자열로 바꿉니다.

5

공개 정적 문자열 quoteReplacement(문자열 s)

지정된 문자열에 대한 리터럴 대체 문자열을 반환합니다. 이 메서드는 리터럴 대체 s로 작동하는 문자열을 생성합니다. Matcher 클래스의 appendReplacement 메소드에서.

시작 및 종료 방법

다음은 "cat"이라는 단어가 입력 문자열에 나타나는 횟수를 계산하는 예입니다 -

라이브 데모
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);   // get a matcher object
      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" 문자가 더 긴 단어의 하위 문자열이 아님을 확인할 수 있습니다. 또한 입력 문자열에서 일치가 발생한 위치에 대한 유용한 정보를 제공합니다.

start 메서드는 이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 시작 인덱스를 반환하고 end는 일치하는 마지막 문자의 인덱스에 1을 더한 인덱스를 반환합니다.

매치 및 lookat 메소드

match 및 lookAt 메서드는 모두 패턴에 대해 입력 시퀀스를 일치시키려고 시도합니다. 그러나 차이점은 일치에는 전체 입력 시퀀스가 ​​일치해야 하지만 lookAt에는 일치하지 않는다는 점입니다.

두 방법 모두 항상 입력 문자열의 시작 부분에서 시작합니다. 다음은 기능을 설명하는 예입니다 -

라이브 데모
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 및 replaceAll 메소드

replaceFirst 및 replaceAll 메서드는 주어진 정규식과 일치하는 텍스트를 바꿉니다. 이름에서 알 수 있듯이 replaceFirst는 첫 번째 항목을 대체하고 replaceAll은 모든 항목을 대체합니다.

다음은 기능을 설명하는 예입니다 -

라이브 데모
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 메소드

Matcher 클래스는 텍스트 교체를 위한 appendReplacement 및 appendTail 메서드도 제공합니다.

다음은 기능을 설명하는 예입니다 -

라이브 데모
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);
      
      // get a matcher object
      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 클래스는 무엇이 잘못되었는지 판별하는 데 도움이 되는 다음 메소드를 제공합니다 -

Sr.No. 방법 및 설명
1

공개 문자열 getDescription()

오류에 대한 설명을 검색합니다.

2

공개 int getIndex()

오류 인덱스를 검색합니다.

3

공개 문자열 getPattern()

잘못된 정규식 패턴을 검색합니다.

4

공개 문자열 getMessage()

구문 오류 및 해당 인덱스에 대한 설명, 잘못된 정규식 패턴 및 패턴 내 오류 인덱스의 시각적 표시를 포함하는 여러 줄 문자열을 반환합니다.


java

  1. C# 식, 문 및 블록(예제 포함)
  2. 자바 연산자
  3. Java 표현식, 명령문 및 블록
  4. 자바 주석
  5. 자바 for-each 루프
  6. 자바 문자열
  7. 자바 인터페이스
  8. 자바 리소스 사용
  9. 자바 주석
  10. 자바 어설션