java regex tutorial with regular expression examples
이 Java Regex 튜토리얼은 Java에서 정규식이 무엇인지, 왜 필요한지, 정규식 예제를 사용하여 사용하는 방법을 설명합니다.
에 정규식 Java에서 ' 정규식 ”는 문자열 검색 패턴을 정의하는 데 사용되는 표현식입니다.
검색 패턴은 단순 문자 또는 하위 문자열이거나 문자열에서 검색 할 특정 패턴을 정의하는 복잡한 문자열 또는 표현식 일 수 있습니다.
또한 패턴은 문자열에 한 번 이상 일치해야 할 수 있습니다.
=> 모두를위한 Java 교육 시리즈를 보려면 여기를 방문하십시오.
학습 내용 :
정규식 : 필요한 이유
정규식은 주로 문자열에서 패턴을 검색하는 데 사용됩니다. 문자열에서 패턴을 검색하는 이유는 무엇입니까? 문자열에서 특정 패턴을 찾은 다음 조작하거나 편집 할 수 있습니다.
따라서 컴퓨터 응용 프로그램에서 다양한 패턴을 조작해야하는 지속적인 요구 사항이있을 수 있습니다. 따라서 패턴 검색을 용이하게하려면 항상 정규식이 필요합니다.
이제 검색 할 패턴이 주어지면 정규식이 정확히 어떻게 작동합니까?
정규식을 사용하여 텍스트를 분석하고 변경할 때 '정규식을 문자열 또는 텍스트에 적용했습니다'라고 말합니다. 우리가하는 일은 텍스트에 '왼쪽에서 오른쪽'방향으로 패턴을 적용하고 소스 문자열이 패턴과 일치하는 것입니다.
예를 들면 문자열“ 아바 바바 밥 ”. 정규식 'aba'가 정의되어 있다고 가정 해 보겠습니다. 이제이 정규식을 문자열에 적용해야합니다. 정규식을 왼쪽에서 오른쪽으로 적용하면 정규식은 ' aba_aba___ ”, 두 곳에서.
따라서 일단 소스 캐릭터가 매치에 사용되면 재사용 할 수 없습니다. 따라서 첫 번째 일치 aba를 찾은 후 세 번째 문자 'a'는 재사용되지 않았습니다.
닷넷 인터뷰 질문과 답변
java.util.regex
Java 언어는 regex에 대한 내장 클래스를 제공하지 않습니다. 그러나 우리는 ' java.util.regex ”패키지.
java.util.regex 패키지는 아래와 같이 하나의 인터페이스와 세 개의 클래스를 제공합니다.
패턴 클래스 : 패턴 클래스는 컴파일 된 정규식을 나타냅니다. Pattern 클래스에는 공용 생성자가 없지만 Pattern 객체를 반환하고 패턴을 만드는 데 사용할 수있는 정적 컴파일 () 메서드를 제공합니다.
Matcher 클래스 : Matcher 클래스 개체는 정규식 패턴을 문자열과 일치시킵니다. Pattern 클래스와 마찬가지로이 클래스는 공용 생성자를 제공하지 않습니다. Matcher 객체를 반환하는 matcher () 메서드를 제공합니다.
PatternSyntaxException : 이 클래스는 확인되지 않은 예외를 정의합니다. PatternSyntaxException 유형의 객체는 정규식 패턴의 구문 오류를 나타내는 확인되지 않은 예외를 반환합니다.
MatchResult 인터페이스 : MatchResult 인터페이스는 정규식 패턴 일치 결과를 결정합니다.
Java Regex 예
Java에서 정규식의 간단한 예를 구현해 보겠습니다. 아래 프로그램에서 우리는 패턴으로 간단한 문자열을 가지고 있고 그것을 문자열과 일치시킵니다. 출력은 패턴이있는 문자열의 시작 및 끝 위치를 인쇄합니다.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args()) { //define a pattern to be searched Pattern pattern = Pattern.compile('Help.'); // Search above pattern in 'softwareTestingHelp.com' Matcher m = pattern.matcher('softwareTestingHelp.com'); // print the start and end position of the pattern found while (m.find()) System.out.println('Pattern found from position ' + m.start() + ' to ' + (m.end()-1)); } }
산출:
15에서 19까지 패턴 발견
자바의 정규식 매처
matcher 클래스는 MatchResult 인터페이스를 구현합니다. Matcher는 정규식 엔진 역할을하며 문자 시퀀스의 정확한 일치를 수행하는 데 사용됩니다.
다음은 Matcher 클래스의 일반적인 메서드입니다. 더 많은 방법이 있지만 아래에 중요한 방법 만 나열했습니다.
하지 마라 | 방법 | 기술 |
---|---|---|
7 | int start () | 일치하는 하위 시퀀스의 시작 인덱스를 제공하고이를 반환합니다. |
1 | 부울 매치 () | 정규식이 패턴과 일치하는지 확인합니다. |
두 | 패턴 패턴 () | matcher가 해석하는 패턴을 반환합니다. |
삼 | 부울 find () | 이 메소드는 패턴에 일치시킬 다음 표현식을 찾습니다. |
4 | 부울 찾기 (int start) | find ()와 같지만 주어진 시작 위치에서 일치시킬 표현식을 찾습니다. |
5 | 문자열 그룹 () | 패턴과 일치하는 하위 시퀀스를 반환합니다. |
6 | 문자열 그룹 (문자열 이름) | 입력 하위 시퀀스를 반환합니다. 이는 지정된 이름의 그룹을 캡처하여 이전 일치 작업에서 캡처됩니다. |
8 | int end () | 일치하는 하위 시퀀스의 끝 위치 / 인덱스를 반환합니다. |
9 | int groupCount () | 일치하는 하위 시퀀스의 총 수를 반환합니다. |
10 | String replaceAll (문자열 대체) | 패턴과 일치하는 입력 시퀀스의 모든 하위 시퀀스를 주어진 대체 문자열로 바꿉니다. |
열한 | String replaceFirst (문자열 대체) | 입력 시퀀스의 첫 번째 일치하는 하위 시퀀스를 지정된 대체 문자열로 바꿉니다. |
12 | 문자열 toString () | 현재 일치 자의 문자열 표현을 반환합니다. |
정규식 구현 예
이러한 방법 중 일부 사용 예를 살펴 보겠습니다.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherDemo { public static void main(String() args) { String inputString = 'She sells sea shells on the sea shore with shells'; //obtain a Pattern object Pattern pattern = Pattern.compile('shells'); // obtain a matcher object System.out.println('input string: ' + inputString); Matcher matcher = pattern.matcher(inputString); inputString = matcher.replaceFirst('pearls'); System.out.println('
replaceFirst method:' + inputString); //use replaceAll method to replace all occurrences of pattern inputString = matcher.replaceAll('pearls'); System.out.println('
replaceAll method:' + inputString); } }
산출:
입력 문자열 : 그녀는 조개와 함께 바다 해안에서 바다 조개를 판매합니다
replaceFirst 방법 : 그녀는 조개와 함께 바다 해안에서 바다 진주를 판매합니다
replaceAll 방법 : 그녀는 진주와 함께 바다 해안에 바다 진주를 판매
자바의 정규식 패턴 클래스
패턴 클래스는 입력 문자열과 일치시키는 데 사용할 수있는 정규식 엔진의 패턴을 정의합니다.
다음 표는 일반적으로 사용되는 Pattern 클래스에서 제공하는 메서드를 보여줍니다.
하지 마라 | 방법 | 기술 |
---|---|---|
7 | String () split (CharSequence 입력, 정수 제한) | 입력 문자열은 주어진 패턴에서 찾은 일치 항목을 기준으로 분할됩니다. |
1 | 정적 패턴 컴파일 (문자열 정규식) | 정규식의 컴파일 된 표현을 반환합니다. |
두 | 정적 패턴 컴파일 (문자열 정규식, 정수 플래그) | 지정된 플래그를 사용하여 지정된 정규식을 컴파일하고 패턴을 반환합니다. |
삼 | 일치 항목 (CharSequence 입력) | 입력 시퀀스를 패턴과 일치시켜 일치자를 반환합니다. |
4 | 정적 부울 일치 (문자열 정규식, CharSequence 입력) | 주어진 정규식을 컴파일하고 주어진 입력과 패턴을 일치시킵니다. |
5 | int 플래그 () | 일치가 완료된 패턴의 플래그를 반환합니다. |
6 | String () split (CharSequence 입력) | 입력 문자열은 주어진 패턴에서 찾은 일치 항목을 기준으로 분할됩니다. |
8 | 문자열 패턴 () | 정규식 패턴을 반환합니다. |
9 | 정적 문자열 따옴표 (String s) | 주어진 문자열에 대한 리터럴 문자열 (패턴)을 반환합니다. |
10 | 문자열 toString () | 패턴의 문자열 표현을 얻습니다. |
아래 예제에서는 위의 Pattern 클래스 메서드 중 일부를 사용합니다.
import java.util.regex.*; public class Main { public static void main(String() args) { // define a REGEX String String REGEX = 'Test'; // string to be searched for given pattern String actualString = 'Welcome to SoftwareTestingHelp portal'; // generate a pattern for given regex using compile method Pattern pattern = Pattern.compile(REGEX); // set limit to 2 int limit = 2; // use split method to split the string String() array = pattern.split(actualString, limit); // print the generated array for (int i = 0; i 산출:
array (0) = 소프트웨어에 오신 것을 환영합니다
어레이 (1) = ingHelp 포털
위의 프로그램에서 우리는 패턴을 생성하기 위해 컴파일 메소드를 사용합니다. 그런 다음이 패턴에 대한 입력 문자열을 분할하여 배열로 읽습니다. 마지막으로 입력 문자열을 분할 한 결과 생성 된 배열을 표시합니다.
정규식 문자열 일치 방법
문자열 자습서에서 String.Contains () 메서드를 보았습니다. 이 메서드는 문자열에 지정된 문자가 포함되어 있는지 여부에 따라 부울 값 true 또는 false를 반환합니다.
자바의 다른 메소드에서 배열을 호출하는 방법
마찬가지로 문자열이 정규식 또는 정규식과 일치하는지 확인하는 'matches ()'메서드가 있습니다. 문자열이 지정된 정규식과 일치하면 true 값이 반환되고 그렇지 않으면 false가 반환됩니다.
match () 메서드의 일반 구문 :
public boolean matches (String regex)
지정된 정규식이 유효하지 않으면 'PatternSyntaxException'이 발생합니다.
match () 메서드의 사용법을 보여주는 프로그램을 구현해 보겠습니다.
public class MatchesExample{ public static void main(String args()){ String str = new String('Java Series Tutorials'); System.out.println('Input String: ' + str); //use matches () method to check if particular regex matches to the given input System.out.print('Regex: (.*)Java(.*) matches string? ' ); System.out.println(str.matches('(.*)Java(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)Series(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)String(.*)')); System.out.print('Regex: (.*)Tutorials matches string? ' ); System.out.println(str.matches('(.*)Tutorials')); } }
산출:
입력 문자열 : Java 시리즈 자습서
정규식 : (. *) Java (. *)가 문자열과 일치합니까? 진실
정규식 : (. *) Series (. *)는 문자열과 일치합니까? 진실
정규식 : (. *) Series (. *)는 문자열과 일치합니까? 그릇된
정규식 : (. *) 튜토리얼이 문자열과 일치합니까? 진실
우리는 자바에서 정규 표현식과 함께 많은 특수 문자와 메타 문자를 사용합니다. 또한 패턴 일치를 위해 많은 문자 클래스를 사용합니다. 이 섹션에서는 정규식과 함께 사용할 수있는 문자 클래스, 메타 문자 및 수량자를 포함하는 테이블을 제공합니다.
정규식 문자 클래스
하지 마라 캐릭터 클래스 기술 7 (a-z && (^ m-p)) 빼기 : a부터 z까지, m부터 p까지 아님 : (a-lq-z) 1 (pqr) p, q 또는 r 두 (^ pqr) 부정 : p, q 또는 r 이외의 모든 문자 삼 (a-zA-Z) 범위 : a-z 또는 A-Z (포함) 4 (a-d (m-p)) 공용체 : a-d 또는 m-p : (a-dm-p) 5 (a-z && (def)) 교차로 : d, e 또는 f 6 (a-z && (^ bc)) 빼기 : a ~ z, b 및 c 제외 : (ad-z)
정규식 한정자
한정자는 정규식에서 문자가 발생하는 횟수를 지정하는 데 사용됩니다.
다음 표는 Java에서 사용되는 일반적인 정규식 한정자를 보여줍니다.
하지 마라 정규식 한정자 기술 7 에 모든 비 단어 문자, (^ w) 1 엑스? x가 한 번 표시되거나 전혀 표시되지 않음 두 x + x가 한 번 이상 나타납니다. 삼 x * x는 0 회 이상 발생 4 x {n} x는 n 번 발생 5 x {n,} x가 n 회 이상 발생 6 X 및 Z} x는 최소 y 회 발생하지만 z 회 미만 발생
정규식 메타 문자
정규식의 메타 문자는 단축 코드로 작동합니다. 이러한 코드에는 다른 단축 코드와 함께 공백 및 공백이 아닌 문자가 포함됩니다.
다음 표에는 정규식 메타 문자가 나열되어 있습니다.
하지 마라 메타 문자 기술 1 . 모든 문자 (종료 자와 일치하거나 일치하지 않을 수 있음) 두 디 모든 숫자, (0-9) 삼 디 숫자가 아닌 모든 (^ 0-9) 4 에스 모든 공백 문자, ( t n x0B f r) 5 에스 공백이 아닌 문자, (^ s) 6 에 모든 단어 문자, (a-zA-Z_0-9) 8 b 단어 경계 9 B 비 단어 경계
다음은 Regex에서 위의 특수 문자를 사용하는 Java 프로그램입니다.
import java.util.regex.*; public class RegexExample{ public static void main(String args()){ // returns true if string exactly matches 'Jim' System.out.print('Jim (jim):' + Pattern.matches('Jim', 'jim')); // Returns true if the input string is Peter or peter System.out.println('
(Pp)eter(Peter) :' + Pattern.matches('(Pp)eter', 'Peter')); //true if string = abc System.out.println('
.*abc.*(pqabcqp) :' + Pattern.matches('.*abc.*', 'pqabcqp')); // true if string doesn't start with a digit System.out.println('
^(^\d).*(abc123):' + Pattern.matches('^(^\d).*', 'abc123')); // returns true if the string contains exact three letters System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z) (aQz):' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z)', 'aQz')); System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z', 'a10z')); //input string length = 4 // true if the string contains 0 or more non-digits System.out.println('
\D*, abcde:' + Pattern.matches('\D*', 'abcde')); //True // true of line contains only word this ^-start of the line, $ - end of the line System.out.println('
^This$, This is Java:' + Pattern.matches('^This$', 'This is Java')); System.out.println('
^This$, This:' + Pattern.matches('^This$, This', 'This')); System.out.println('
^This$, Is This Java?:' + Pattern.matches('^This$, Is This Java?', 'Is This Java?')); } }
산출:
짐 (짐) : 거짓
(Pp) eter (Peter) : true
. * abc. * (pqabcqp) : true
^ (^ d). * (abc123) : true
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz) : 참
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde : true
^ This $, 이것은 Java : false
^ This $, This : false
^ This $, Is This Java? : false
위의 프로그램에서는 입력 문자열과 일치하는 다양한 정규식을 제공했습니다. 독자는 개념을 더 잘 이해하기 위해 각 정규식에 대한 프로그램의 주석을 읽는 것이 좋습니다.
정규식 논리 또는 (|) 연산자
정규식에서 논리 또는 (| 연산자)를 사용하여 |의 피연산자를 선택할 수 있습니다. 운영자. 정규식에서이 연산자를 사용하여 문자 또는 문자열을 선택할 수 있습니다. 예를 들면 단어‘test’와‘Test’를 모두 일치 시키려면 논리 또는 연산자에이 단어를 Test | test로 포함합니다.
이 연산자를 이해하기 위해 다음 예제를 보겠습니다.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexOR { public static void main(String() args) { // Regex string to search for patterns Test or test String regex = '(Test|test)'; // Compiles the pattern and obtains the matcher object from input string. Pattern pattern = Pattern.compile(regex); String input = 'Software Testing Help'; Matcher matcher = pattern.matcher(input); // print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } //define another input string and obtain the matcher object input = 'SoftwaretestingHelp'; matcher = pattern.matcher(input); // Print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } } }
산출:
9-13에서 'Test'라는 텍스트를 찾았습니다.
8-12에 'test'라는 텍스트가 있습니다.
이 프로그램에서는 정규식 '(Test | test)'를 제공했습니다. 그런 다음 먼저 입력 문자열을 'Software Testing Help'로 제공하고 패턴을 일치시킵니다. 일치하는 항목이 발견되고 위치가 인쇄되는 것을 확인합니다.
다음으로 입력 문자열을 'SoftwaretestingHelp'로 제공합니다. 이번에도 일치가 발견됩니다. 이것은 정규식이 또는 연산자를 사용했기 때문에 | 연산자는 문자열과 일치합니다.
Regex를 사용한 이메일 유효성 검사
java.util.regex.Pattern.matches () 메소드를 사용하여 정규식으로 이메일 ID (주소)의 유효성을 검사 할 수도 있습니다. 주어진 이메일 ID를 정규식과 일치시키고 이메일이 유효하면 true를 반환합니다.
다음 프로그램은 정규식을 사용한 이메일 유효성 검사를 보여줍니다.
public class EmailDemo { static boolean isValidemail(String email) { String regex = '^(\w-_\.+)*(\w-_\.)\@((\w)+\.)+(\w)+(\w)$'; //regex to validate email. return email.matches(regex); //match email id with regex and return the value } public static void main(String() args) { String email = 'ssthva@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); email = '@sth@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); } }
산출:
이메일 ID : ssthva@gmail.com
유효한 이메일 ID? 진실
이메일 ID : @ sth @ gmail.com
유효한 이메일 ID? 그릇된
위의 출력에서 볼 수 있듯이 첫 번째 이메일 ID가 유효합니다. 두 번째 ID는 @로 직접 시작하므로 정규식은 유효성을 검사하지 않습니다. 따라서 잘못된 ID입니다.
기본 게이트웨이를 계속 사용할 수 없습니다.
자주 묻는 질문
Q # 1) 정규 표현식이란?
대답: 에 정규식 일반적으로 정규식이라고하는 것은 입력 문자열의 유효성을 검사하는 데 사용되는 패턴 또는 일련의 문자 (일반 또는 특수 또는 메타 문자)입니다.
Q # 2) Java에서 정규식에 대한 Matcher 클래스의 의미는 무엇입니까?
대답: matcher 클래스 (java.util.regex.Matcher)는 regex 엔진으로 작동합니다. 패턴을 해석하여 매칭 작업을 수행합니다.
Q # 3) Java의 패턴은 무엇입니까?
대답: 패키지 java.util.regex는 정규식을 정규식의 표준 표현 인 패턴으로 컴파일하는 데 사용되는 Pattern 클래스를 제공합니다. 이 패턴은 패턴과 일치시켜 문자열의 유효성을 검사하는 데 사용됩니다.
Q # 4) 정규식에서 B는 무엇입니까?
대답: 정규식에서 B는 b로 표시되며 단어 경계라는 위치를 일치시키는 데 사용되는 앵커 문자입니다. 줄의 시작은 캐럿 (^)으로 표시되고 줄의 끝은 달러 ($) 기호로 표시됩니다.
Q # 5) 패턴 스레드로부터 안전한 Java입니까?
대답: 예. Pattern 클래스의 인스턴스는 변경할 수 없으며 여러 동시 스레드에서 사용하기에 안전합니다. 그러나 matcher 클래스 인스턴스는 스레드로부터 안전하지 않습니다.
결론
이 자습서에서는 Java의 정규식에 대해 설명했습니다. 'regex'라고도하는 정규 표현식은 Java에서 입력 문자열의 유효성을 검사하는 데 사용됩니다. Java는‘ java.util.regex ' 패턴을 정의하고 입력 문자열과 일치시키는 데 도움이되는 Pattern, Matcher 등과 같은 클래스를 제공하는 패키지입니다.
또한 패턴 매칭을위한 속기 코드를 제공하는 정규식에서 사용할 수있는 다양한 특수 문자 클래스와 메타 문자를 보았습니다. 정규식을 사용하여 이메일 유효성 검사도 탐색했습니다.
=> 여기에서 간단한 Java 교육 시리즈를 살펴보십시오.
추천 도서