본문 바로가기

정규식

Regular Expression > Methods of the PatternSyntaxException Class PatternSyntaxException 는 체크되지 않는 예외로 정규식 표현에서 문법 에러에 대해서 처리를 수행한다. PatternSyntaxException 클래스는 다음과 같은 메소드를 반환한다. 이것은 무엇이 잘못 되었는지 알려주는 역할을 한다. public String getDescription(): 에러에 대한 설명을 반환한다. public int getIndex(): 에러 인덱스를 반환한다. public String getPattern(): 잘못된 정규식 패턴을 반환한다. public String getMessage(): 문법 에러와 해당 인덱스에서 표현된 멀티라인을 반환한다. 에러가난 정규식에서는 패턴을 포함한 인덱스에 대해서 보여준다. 다음 소스 코드 RegexTestHarness2.ja.. 더보기
Regular Expression > Methods of the Pattern Class 지금까지 우리는 test harness를 이용하여 패턴 객체를 생성하고 그들의 기본 폼을 이용하였다. 이번 섹션에서는 좀더 향상된 기술로 플래그와 함깨 패턴을 생성하거나 포함된 플래그 표현들을 이용할 것이다. 우리가 아직 논의하지 않은 몇가지 유용한 추가적인 내용들에 대해서 논의할 것이다.Creating a Pattern with FlagsPattern 클래스는 플래그를 제공하는 새로운 compile 메소드를 가지고 있다. 플래그 파라미터는 비트 마스크 처리가 되며 다음과 같이 public static field들로 구성되어 잇다. Pattern.CANON_EQ 규칙에 의해서 같은지 검사하도록 한다. 이 플래그가 지정되면 2개의 캐릭터는 매치를 수행할때 전체가 규칙에 의해서 분해를 수행한 것이 매칭이 되.. 더보기
Regular Expression > Boundary Matchers 지금까지 우리는 특정 위치에서 입력된 스트링의 부분이 맞는지 아닌지에 대해서 관심을 가졌다. 그러나 우리는 매치가 어디서 이루어 지는지에 대해서는 다루지 않았다.boundary matchers를 이용하여 더욱 정밀하게 특정 정보에 대해서 매치되는 패턴을 만들 수 있다. 예를 들어, 부분적인 단어를 찾는데 관심을 가지고 있을때, 이 매치되는 값이 처음 라인과 끝 라인에 이 값이 나타나기를 원하는 경우가 잇을 것이다. 혹은 단어의 영역에서 매치가 이루어 지는지 알고 싶을 수 있고, 또는 이전 매치의 끝에서 이루어 지는지에 대해서 원할 수 있다. 다음은 boundary matcher의 예이다. Boundary Matchers ^ The beginning of a line $ The end of a line \.. 더보기
Regular Expression > Capturing Groups 이전 섹션에서 어떻게 수량 지정자를 하나의 문자, character class와 capturing group에 지정하는지에 대해서 알아 보았다. 그러나 지금까지 우리는 capturing group에 대해서 상세하게 논의하지 않았다.Capturing groups 은 하나의 유닛으로 복수의 문자를 다룬다. 이러한 방법은 ()로 문자 그룹을 둘러 쌓면 된다. 예를 들어 정규식 (dog)는 하나의 그룹으로 "d" "o" "g"를 연속적으로 입력하면 된다. 입력 문자의 부분 캡쳐링 그룹으로 묶고 이것을 메모리에 저장한 후 다음에 다시 backreferences를 이용하여 다시 호출할 수 있다. 이것은 이번 섹션 마지막에서 Backreferences를 이용하여 처리한다. Numbering Pattern API에서 .. 더보기
Regular Expression > Quantifiers uantifiers 는 매치될 특정 문자의 발생되는 회수를 지정하는 지정자이다. 일반적으로 Pattern API에는 3가지 섹션으로 greedy, reluctant, possessive 회수 지정자를 아래와 같이 이용하고 있다. 처음에 개략 나타나는 내용을 보면 X?, X??, X?+로 이것은 모두 같은 의미이다. 모두 약속된 매치문자 X에 매치를 수행하며, 한번 나타나거나 아예 나타나지 않는것을 의미한다. 이러한 구현사이에는 미묘한 차이가 잇으며, 이장 끝 부분에서 다시 언급 하도록 할 것이다. Quantifiers Meaning Greedy Reluctant Possessive X? X?? X?+ X, once or not at all X* X*? X*+ X, zero or more times X+ .. 더보기
Regular Expression > Predefined Character Classes Pattern API에는 몇가지 유용한 predefined character class가 있다. 이것은 공통적으로 regular expression에서 이용되는 짧은 표기식이다. Predefined Character Classes . Any character (may or may not match line terminators) \d A digit: [0-9] \D A non-digit: [^0-9] \s A whitespace character: [ \t\n\x0B\f\r] \S A non-whitespace character: [^\s] \w A word character: [a-zA-Z_0-9] \W A non-word character: [^\w] 상단 테이블에서와 같이, 왼쪽 칼럼의 명령은 오른.. 더보기
Regular Expression > Character Classes Pattern 클래스의 스펙을 통해서 지원되는 정규식 생성자를 보고자 한다면 다음 테이블에 나와있다. Character Classes 섹션에서 다음 내용에 대해서 설명할 것이다. Character Classes [abc] a, b, or c (simple class) [^abc] Any character except a, b, or c (negation) [a-zA-Z] a through z, or A through Z, inclusive (range) [a-d[m-p]] a through d, or m through p: [a-dm-p] (union) [a-z&&[def]] d, e, or f (intersection) [a-z&&[^bc]] a through z, except for b and c: .. 더보기
Regular Expression > String Literals API를 이용하여 매칭되는 패턴의 가장 기본적인 형태는 스트링 리터럴의 매칭작업이다. 예를 들어 정규식 표현으로 foo를 입력하고 입력 문자로 foo를 입력한경우 이 매치작업은 문자 비교로 성공적으로 수행된다. 이것을 test harness에 입력해보자. Enter your regex: foo Enter input string to search: foo I found the text "foo" starting at index 0 and ending at index 3. 이 매치는 성공한다. 입력 문자가 3의 길이를 가지는 문자이므로 시작 인덱스 0에서 종료 인덱스 3에 매칭이 된다. 일반적으로 범위는 시작은 포함하고, 끝 인덱스는 제외하는것이 보통이다. 다음 그림과 같이 말이다. The string li.. 더보기