정규식을 사용한 java의 정규식
정규식은 일련의 문자에서 패턴을 설명하는 문자열입니다. You can use the API 정규식 for:
예:
Example
Example
Examples
Catch 그룹은 왼쪽에서 오른쪽으로 열리는 괄호의 수로 계산됩니다. 표현식에서 (A(B(C))), 4개의 그룹이 있습니다. 그룹 0에는 항상 전체 표현식이 포함됩니다.
그룹에 의해 캡처된 부분 문자열은 group(int).
예제 1:
이 프로그램은 전화 번호의 유효성을 읽고 확인하는 정규식을 만듭니다.
Examples
Java Doc: 정규식
JavaPoint: Java 정규식
TutorialsPoint: java - 정규식
Expand: Java
- 문자 시퀀스의 유효성을 검사합니다(예: 이메일 또는 비밀번호의 유효성 확인).
- 에서 검색 문자열;
- 문자열의 패턴 또는 문자 집합 바꾸기.
API java.util.regex 에는 단일 인터페이스와 세 개의 클래스가 있습니다.
- Pattern class: 정규식의 컴파일된 표현입니다. 패턴을 만들려면 해당 메서드 중 하나를 호출해야 합니다공개 정적 컴파일, Pattern 객체를 반환합니다. 이 메서드는 정규식을 argument.
- Matcher class: 문자열을 구문 분석하는 패턴 검색 엔진입니다. Pattern 개체에서 Matcher 메서드를 호출하여 Matcher 개체를 가져옵니다. 이 두 클래스는 함께 작동합니다.
- PatternSyntaxException: 정규식이 유효하지 않을 때 예외를 발생시킵니다.
Matcher class
Matcher:
No. | 방법 | 설명 |
---|---|---|
1 | boolean matches() | 문자열이 패턴을 검사하면 true를 반환합니다 |
2 | boolean find() | < td class="tg-031e">패턴을 확인하는 다음 표현식을 찾습니다|
3 | boolean find(int start) | 시작 인덱스에서 패턴을 확인하는 다음 표현식 찾기 |
Pattern class
정규식의 컴파일된 버전입니다. 패턴 또는 정규식에 사용됩니다.
No. | 방법 | 설명 |
---|---|---|
1 | static 패턴 compile(String regex) | 정규식을 컴파일하고 Pattern |
2 | Matcher matcher( CharSequence 입력) | 입력 시퀀스를 구문 분석하는 매처를 생성합니다 |
3 | static boolean matches(String regex, CharSequence input) | 입력 시퀀스를 컴파일하고 구문 분석합니다. |
String[] split(CharSequence c) | 문자로 시작하는 하위 문자열의 배열을 반환합니다. c | |
5 | String pattern() | 정규식 문자열을 반환합니다. |
Example
import java.util.regex.*;
public class regexTest {
public static void main(String args[]) {
패턴 p;
Matcher m;
//패턴이 있는 정규식 컴파일: "a"
p = Pattern.compile("a");
//문자열 "ab"의 정규식에 엔진을 만들고 연결합니다
m = p.matcher("ab");
//패턴이 발견되면
if(m.find()) {
System.out.println("패턴 발견됨");
}
}
}
패턴 발견됨
정규식 구문
1- 메타 문자
메타 문자는 의미가 있거나 다른 방식으로 문자입니다. 패턴이 구성되는 방식입니다. 예를 들어, 메타 문자 앞에 이면 파서에서 해석되지 않습니다. Java 정규식에서 지원하는 메타 문자는 다음 표에 나와 있습니다.문자 | 설명 |
---|---|
[ ] | |
{ } | Quantizer |
\ | character는 메타문자로 간주되지 않습니다 |
^ | 줄의 시작 |
$ | Endline |
| | Operator OU |
? | 0 또는 앞의 식 |
* | 0 또는 앞의 식 |
+ | 앞의 표현식의 1배 이상 |
. | 모든 문자를 대체합니다 |
예:
import java.util.regex.Matcher;matches()Matcher 및 Pattern 클래스에 속하며 true 찾고 있는 패턴이 문자열에 있는 경우.
import java.util.regex.Pattern;
public class metaCharactersExample: {
public static void main(String[] args) {
System.out.println(
Pattern.matches(".c", "abc"));//false (. a만 대체)
System.out.println(
Pattern.matches(".. c", "abc"));//true(세 번째 문자는 c)
System.out.println(
Pattern.matches("... c", "abbc"));//true(4번째 문자는 c)
System.out.println(Pattern.matches("\\d", "2"));//true(한 자리만)
System.out.println(Pattern.matches("\\d", "332"));//false(여러 자리)
System.out.println(Pattern.matches(
"\\d","123abc"));//false(숫자 및 문자)
System.out.println(Pattern.matches(
"\\D*", "geek"));//true (암호화되지 않고 한 번 이상 나타남)
}
}
2- 문자 클래스
문자 클래스는 문자 집합입니다. 메타 문자 [...] 은 정규식 내의 문자 클래스를 의미합니다. 하이픈 '-'입니다. 예[0-9]은 0에서 9 사이의 숫자를 나타냅니다.[abc] | a, b 또는 c |
---|---|
[^abc] | 부정: a,b 및 c를 제외한 모든 알파벳을 대체합니다 |
[a-zA-Z] | 범위: a에서 z까지, A에서 Z까지 모든 문자를 바꿉니다 |
[a-d[m-p]] | Union: a에서 d로 또는 m에서 p로 문자를 바꿉니다: [a-dm-p] |
[a-z& & [ABC]] | Intersection: a, b, c의 전체 교집합을 a에서 z까지의 문자로 바꿉니다 |
[a-z& & [^cd]] | 빼기: c와 d를 제외한 a부터 z까지의 모든 문자를 바꿉니다: [abe-z] |
[a-z& & [^m-p]] | 빼기: m에서 p를 제외한 a에서 z까지: [a-lq-z] |
Example
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class metaFeaturesExample: {
public static void main(String[] args) {
패턴 p;
Matcher m;
//345를 제외한 0에서 9까지의 모든 숫자
p = Pattern.compile("[0-9& & [^345]]");
m = p.matcher("7");
부울 b = m.matches();
System.out.println(b);
}
}
true
미리 정의된 문자 클래스
Java:class | 설명 |
---|---|
. | 모든 문자 |
\d | 하나의 숫자: [0-9] |
\D | 숫자 [^0-9]를 제외한 모든 문자 |
\s | 공백 문자: 줄 바꿈, 공백: [ \t\n\x0B\f\r] |
\S | 흰색이 아닌 문자: [^\s] |
\w | 단어 문자: [a-zA-Z_0-9] |
\W | 단어가 아닌 문자: [^\w] |
Example
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CharacterClassesExample{
public static void main(String args[]) {
//d: 한 자리
//+: 1자리 이상
String regex = "\\d+";
패턴 p = Pattern.compile(regex);
문자열 구문 = "the year 2015 21";
매처 m = p.matcher(문장);
if (m.find()) {
//첫 번째 그룹 표시
System.out.println("group 0:" + m.group(0));
}
}
}
group 0:2015이 예에서 정규식 "\\d+"에는 두 개의 슬래시가 포함되어 있는데, Java에서는 항상 '\ 이전. \d은 0에서 9 사이의 범위를 의미합니다. '+ 인 경우 발견된 첫 번째 숫자만 고려됩니다: 2.
3- 수량자
Quantizers를 사용하면 문자가 반복되는 횟수를 설정할 수 있습니다.양자화기 | 설명 |
---|---|
X? | X는 한 번 이상 발생하지 않습니다 |
X+ | 1회 이상 |
X* | 0회 또는 여러 번 |
X{n} | n 회 |
X{n, } | n 또는 여러 번 |
X{y,z} | 최소 y회, z회 미만 |
Examples
모티프 | 문자열 | 결과 |
---|---|---|
[abc]? | a | a |
[abc]? | aa | none | tr>
[abc]? | ab | none |
a? | abdaaaba | {a}, { },{ },{a},{a},{a},{ },{a} |
a* | abdaaaba | {a},{ },{ },{aa},{ },{a} |
a+ | abdaaaba | {a}, {aaa},{a} |
a[3] | aaaa | aaa |
a{3, 6} | aaaaaaaa | aaaaaa | tr>
[0-9]{4} | 2038년 버그는 2000년 버그와 비슷합니다 | {2038}, {2000} |
4- 캡처 그룹
캡처 그룹은 여러 문자를 처리할 수 있는 기능을 제공합니다. 단일 단위 또는 하위 패턴으로. 예를 들어, (abc)은 "a", "b" 및 "c".Catch 그룹은 왼쪽에서 오른쪽으로 열리는 괄호의 수로 계산됩니다. 표현식에서 (A(B(C))), 4개의 그룹이 있습니다. 그룹 0에는 항상 전체 표현식이 포함됩니다.
- 그룹 0: (A(B(C)))
- 그룹 1: (A)
- 그룹 2: (B(C))
- 그룹 3: (C)
그룹에 의해 캡처된 부분 문자열은 group(int).
예제 1:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Goup {
public static void main(String[] args) {
패턴 p = Pattern.compile("(A(B(C)))");
매처 m = p.matcher("ABC");
if( m.matches())
for(int i= 0; i<= m.groupCount(); ++i)
System.out.println("그룹 "+i+" :"+m.group(i));
}
}
group 0:ABC예제 2
group 1:ABC
group 2:BC
group 3:C
이 프로그램은 전화 번호의 유효성을 읽고 확인하는 정규식을 만듭니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex_telephone {
public static void main(String[] args) {
문자열 정규식 = "\\b(\\d{3})(\\d{4})(\\d{3})(\\d{3})\\b";
패턴 p = Pattern.compile(regex);
문자열 tel = "2541724156348";
매처 m = p.matcher(tel);
if (m.find()) {
System.out.println("전화: ("
+ m.group(1) + ") " + m.group(2) + "-"
+ m.group(3) + "-" + m.group(4));
}
}
}
전화: (254) 1724-156-348
5- 검색 경계
찾고 있는 패턴의 위치와 시작 위치를 지정하여 패턴을 더 정확하게 만들 수 있습니다.limiter | 설명 |
---|---|
^ | 줄의 시작 |
$ | Endline |
\b | 단어 끝. |
\B | 비단어 End. |
\A | 입력 시퀀스 시작 |
\ G | 이전 발생 끝 |
\Z | 마지막 문자를 제외한 시퀀스 끝 |
\z | 시퀀스 끝 | tr>
Examples
모티프 | 문자열 | 결과 |
---|---|---|
^java$ | java | java |
\s*java$ | java | java |
^hello\w* | helloblahblah | helloblahblah |
\bjava\B | javascript는 프로그래밍 언어입니다 | java |
\Gtest | test test | test |
\btest\b | 이것은 테스트입니다 | test |
패턴을 찾아 바꾸기
Regex API를 사용하면 한 텍스트를 찾아 다른 텍스트로 바꿀 수 있습니다. Java에서는 Matcher 클래스의 두 가지 메소드를 사용하여 이 작업을 수행할 수 있습니다.- replaceFirst(String): 첫 번째 항목만 대체합니다.
- replaceAll(String): 모든 항목을 반복하고 대체합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Replacement {
public static void main(String[] args) {
패턴 p = Pattern.compile("bus");
Matcher m = p.matcher("버스로 이동 중입니다.");
문자열 s = m.replaceAll("train");
System.out.println(들);
}
}
기차로 여행 중입니다References:
Java Doc: 정규식
JavaPoint: Java 정규식
TutorialsPoint: java - 정규식
Expand: Java