2014-10-22 5 views
1

내가 자바 정규 표현식스페이스

내가 섹션과 같은 패턴을 감지 할 모두 새로운 오전 : 나는 코드를 가지고

String line = "Section 12: sadfdggfgfgf"; 
    Pattern ptn = Pattern.compile("Section [0-9+]:"); 
    Matcher mtch = ptn.matcher(line); 

때 PTN = "섹션 [0-9 +] : mtch가 거짓

인 경우 패턴을 감지 할 수 있습니다 (TRUE) ptn = "섹션 [0-9 +]

문자열의 공백에 대해 빠진 것이 있습니까? 섹션 사이에 공백이 있거나 같지 않을 수도 있습니다. <Number>

답변

3

+을 하나 이상의 숫자와 일치하도록 문자 클래스 외부에 배치하십시오. a로 다음 문자열 Section 없기 때문에 [0-9+] 주어진 목록에서 단지 하나의 문자

Pattern ptn = Pattern.compile("Section [0-9]+:"); 

"Section [0-9+]:" 정규식을 실행하는 동안, false를 반환 (범위 0-9 또는 +에서 자리)을 일치합니다 한 자릿수 또는 + 리터럴 다음에 원래 문자열에 :이 계속 추가됩니다 (참고 : 원래 문자열에는 콜론이 뒤에 오는 두 자리 숫자가 포함됨, Section 12: sadfdggfgfgf).

그러나 "Section [0-9+]"Section 뒤에 하나의 숫자가 있기 때문에 true를 반환합니다.

1

문자 클래스 후에 quantifier을 입력해야합니다. 문자 클래스는 일련의 문자를 정의하며 그 중 하나가 일치가 성공하기 위해 발생할 수 있습니다. 현재 0의 문자는 9, +에 정확히 일치합니다 ('한 번만').

콜론이있는 패턴에 대해이 반환되는 이유는 정규식 엔진이 콜론 앞에 두 개의 숫자가있는 단일 숫자 뒤에 콜론을 일치 시키려고하기 때문입니다.

Section [0-9]+: 

이 일치 "정규식 엔진이

올바른 구문이 될 것"섹션 "을 다음과 하나의 수와 일치 할 수 있기 때문에 그 이유는 콜론없이 패턴 사실을 반환이다 구역 "다음에 공백 문자 다음에"0 ~ 9 "의 문자와"하나 이상의 "시간 및 콜론이옵니다. 당신이 제 및 수와 문자열의 수를 수용 할 경우

0

이 정규식 시도 적어도 하나 개의 공간에 대한

Pattern.compile("Section[\\s]*[\\d]+"); 

를, 이것을 사용 :

Pattern.compile("Section[\\s]+[\\d]+"); 

을 자바 정규 표현식에서 \ s는 공백과 일치하고 \ d는 숫자와 일치합니다.그러나 백 슬래시가 이스케이프 시퀀스를 시작하기 때문에 백 슬래시 자체를 이스케이프 처리해야하기 때문에 이중 백 슬래시가 발생합니다. http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

0
Section\s*[0-9]+: 

당신이 상관없이 spacesectionnumber 사이에 존재 여부되는 일치하는지 확인하려면이 옵션을 사용할 수 있습니다

당신은 더 자바 정규 표현식 여기에 패턴 클래스를 읽을 수 있습니다.

+0

섹션 \ s * [0-9] + \ s * : 숫자와 콜론 사이에 공백이있을 수있는 경우를 처리 하시겠습니까? – PW1981

+0

섹션 \\ s * [0-9] + \\ s *는 – PW1981

+0

@ PW1981 섹션 \ s * [0-9] + \ s * :'이 모든 우주 관련 사례를 처리합니다. – vks

관련 문제