프로그래밍 기초 줄의 끝 ($)
- 카테고리 없음
- 2020. 3. 14. 12:55
행의 시작 부분과 마찬가지로 줄 끝이라는 위치에 일치하는 패턴을 작성하려면 메타 문자의 하나 인 "$"를 사용합니다.
형식은 다음과 같습니다.
"패턴 $"
패턴에는 "$"를 제외한 패턴을 설명합니다.
아이디어는 패턴이 "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 모드를 사용하십시오.
구체적인 예로 생각해보십시오. "abc ¥ ndef"라고 문자열에 대해 패턴을 "abc $"로 지정하면 기본적으로 줄 끝 기호를 무시하기 위해 일치하지 않습니다. MULTILINE 모드를 활성화 한 경우에는 줄 끝 기호가 유효 "abc"와 "def"라는 2 개의 행에 대해 조사하게되므로 일치합니다.
기본 상태 : × abc ¥ ndef 멀티 라인 모드 활성화 : ○ abc ¥ ndef
구체적으로는 다음과 같이 설명합니다.
String str = "abc ¥ ndef"; 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 JSample2_1 { public static void main (String args []) { String str1 = "abc def"; String str2 = "def abc"; String str3 = "abc ¥ ndef"; 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"가있는 경우에 일치합니다.
이 글을 공유하기