2011-09-14 4 views
1

내가 시간 펄, 유닉스와 자바 정규 표현식 많이 사용 일치,하지만 난 그것에 대해 자바 놀랐어요 :문자열이 정규 표현식

"help".matches("^h") 

은 false입니다! 자바 문서에서

: http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-)

"만약 사실, 그리고 경우에만,이 캐릭터 라인이 지정된 정규 표현과 일치"진정한 물론

 "help".matches("^h.*") 

또는

 "help".matches("^h.*$") 

수익을 .

놀랍습니다.

+1

무엇이 문제입니까? 우리는 놀랐는가? – amit

+0

표현식은''^ expression $ "'로 끝나는 부분에'$ '를 추가하는 것으로 해석되기 때문입니다. 나는 또한 첫 번째 예와의 일치를 기대하고 있었다. – Matteo

+0

자바 정규식은 어리 석다. 당신은 완전합니다. 이 방법은 IS가 부러진 것과 일치합니다. 여기를보세요 : http://mentaregex.soliveirajr.com – TraderJoeChicago

답변

1

"help" macth "^h". help의 첫 글자 만 일치합니다. "^h"

+0

그러나이 경우'^'는 쓸모 없게됩니다. 정규 표현식의 시작은 항상'^'입니다 : 왜 스펙에 포함되어 있습니까? – Matteo

+0

'^'항상 항상 정규식의 시작임을 확신하지 못합니다. 예를 들어,'help'의'el' 부분이'lp' 표현식과 일치합니다 –

+0

'el'이'lp' 표현식과 일치한다는 것은 무엇을 의미합니까? 몇 가지 테스트를했는데 실제로 전체 문자열과 일치해야하는 것으로 보입니다. – Matteo

1

자바는 perl이나 ruby보다 조금 더 엄격합니다. 그것은 전체 문자열을 일치 시키려고하고 "help"는/^ h /가 일치하지 않는 끝 부분에 추가 엘프가 있습니다. docs에서

:

는이 캐릭터 라인이, 지정된 정규 표현과 일치할지 어떨지를 판정합니다.

문자열 전체가 아닙니다.

+0

그러나이 경우 일치하는 항목이 묵시적이면'^'및'$ '를 사용하는 이유는 무엇입니까? – Matteo

+0

다중 행 모드, http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#MULTILINE은 하나의 상황입니다. –

+0

필자는 방금 perl로 작동한다고 상상했지만 사실은 아니 었습니다 :-) MULTILINE에 대한 문서에서 _ 기본적으로이 표현식은 전체 입력 시퀀스의 처음과 끝에 일치합니다 ._. 기본 사례가 언급되었지만 의미가 없습니다 ... – Matteo