[Java] 행의 시작 (^)

특정 문자가 아닌 행의 선두라는 위치에 일치하는 패턴을 작성하려면 메타 문자의 하나 "^"를 사용합니다.

형식은 다음과 같습니다.

"^ 패턴"

패턴에는 "^"를 제외한 패턴을 설명합니다.

아이디어는 패턴이 "abc"인 경우 대상 문자열에 "abc"라는 문자열이 존재하는지 여부를 검사하지만 패턴이 "^ abc"인 경우에는 대상 문자열 중 에 "줄의 맨"+ "abc"가 존재하는지 여부를 확인합니다. 결과적으로 행의 선두가 "abc"로 시작하는 문자열과 일치하는 것입니다.

구체적인 예로 생각해보십시오. "abc def"와 "def abc"라는 두 개의 문자열에 대해 패턴을 "abc"로 지정한 경우에는 두 문자열에 "abc"가 포함되어 있기 때문에 모두 일치합니다 .

abc def ○ def abc

이에 대해 패턴을 "^ abc"라고 기술하면 줄의 맨 앞에 위치에 "abc"가있는 경우에만 매치합니다. 따라서 "abc def"는 일치하지만 "def abc"는 일치하지 않습니다.

abc def × def abc

구체적으로는 다음과 같이 설명합니다.

String str = "abc def"; String regex = "^ abc"; Pattern p = Pattern.compile (regex); Matcher m = p.matcher (str); if (m.find ()) { System.out.println ( "일치했습니다."); } else { System.out.println ( "일치하지 않습니다"); }

위의 경우는 일치합니다.

멀티 라인 모드

"^"행의 시작 부분에 해당하므로 대상 문자열이 여러 행으로 구성되는 경우, 각 행의 선두에 일치하는지 여부를 확인합니다. 그러나 기본적으로 "^"는 줄 끝 기호를 무시하는 행의 선두는 아니고 文の 선두에만 성냥 할 수 있습니다. 각 행의 선두에 일치시키고 싶은 경우에는 MULTILINE 모드를 사용하십시오.

구체적인 예로 생각해보십시오. "def ¥ nabc"라고 문자열에 대해 패턴을 "^ abc"로 지정하면 기본적으로 줄 끝 기호를 무시하기 위해 일치하지 않습니다. MULTILINE 모드를 활성화 한 경우에는 줄 끝 기호가 유효 "def"와 "abc"라는 2 개의 행에 대해 조사하게되므로 일치합니다.

기본 상태 : × def ¥ nabc 멀티 라인 모드 활성화 : ○ def ¥ n abc

구체적으로는 다음과 같이 설명합니다.

String str = "def ¥ nabc"; String regex = "^ abc"; Pattern p = Pattern.compile (regex, Pattern.MULTILINE); Matcher m = p.matcher (str); if (m.find ()) { System.out.println ( "일치했습니다."); } else { System.out.println ( "일치하지 않습니다"); }

 

샘플 프로그램

그럼 실제로 시도합니다.

import java.util.regex.Pattern; import java.util.regex.Matcher; class JSample1_1 { public static void main (String args []) { String str1 = "abc def"; String str2 = "def abc"; String str3 = "def ¥ nabc"; String regex1 = "^ abc"; Pattern p1 = Pattern.compile (regex1); String regex2 = "^ abc"; Pattern p2 = Pattern.compile (regex2, Pattern.MULTILINE); System.out.println ( "패턴 :"+ regex1); check (p1, str1); check (p1, str2); check (p1, str3); System.out.println ( "¥ n 멀티 라인 모드로 변경 ¥ n"); System.out.println ( "패턴 :"+ regex2); check (p2, str1); check (p2, str2); check (p2, str3); } private static void check (Pattern p, String target) { Matcher m = p.matcher (target); if (m.find ()) { System.out.println ( "○"+ target); } else { System.out.println ( "×"+ target); } } }

에서 컴파일을하신 후 실행 해 봅니다.

기본 상태입니다 그리고 문자열의 시작 부분에서 "abc"가있는 경우에만 일치하지만 멀티 라인 모드를 사용하면 행의 시작 부분에 "abc"가있는 경우에 일치합니다.

이 글을 공유하기

댓글

Designed by JB FACTORY