2011-01-29 2 views

답변

1

을위한 특별한 경우가 있습니다 x = Pattern.LITERAL을 설정하여 두 번째 표현에서 s을 두 번 인용하기 때문에 대답은 '아니오'입니다. 큰 따옴표를 사용하면 s="A" 문자열은 "A"과 일치하지 않지만 문자열은 "\\QA\\E"입니다. 그러나

Pattern.compile(s, x | Pattern.LITERAL) 

내가 두 번 설명서를 읽은

Pattern.compile(Pattern.quote(s), x & ~Pattern.LITERAL) 
0

비록 문제가 보이지 않지만 전체 패턴 견본과 함께 임의의 패턴 플래그를 적용하는 것을 신뢰하지 않습니다. documentation은 결국 모든 플래그를 렌더링하지만 두 개는 불필요한 것으로 설명합니다. 내가 라고 생각하면 괜찮 겠지 만, 색은 이다. - mistrusting.

비 메타 태스킹으로 인용하고자하는 패턴 부분에만 \Q … \E을 사용해 보셨습니까?

+0

에 해당하는 것 같다 그것은 불분명하다. 이 두 설명은 유사하지만 동일하지는 않습니다. OTOH, 나는 별다른 차이를 느끼지 않습니다. 따옴표에 대한 문서에서 "마치 문자 그대로의 패턴 인 것처럼"씁니다. 대소 문자에 대해서는 아무 것도 없습니다. 나는 \ Q .. \ E를 안다. 그리고 그것은 Pattern.quote가 실제로 작동하는 방법이다. – maaartinus

3

짧은 대답 : 예를 들어, 예.

답변 : 예, 그렇지만 Pattern.quote는 더욱 유연합니다. 어떤 경우에만 패턴의이 인용 되었으면 좋겠습니까? 마찬가지로 다음 Pattern.LITERAL 플래그를 설정으로

Pattern.compile(Pattern.quote(s) + "+", x) 

, 심지어 + 문자는 이제 문자 그대로 처리됩니다.

설명서를 신뢰할 수 없다면 에 대한 Google 코드 검색에서 the source code을 검색하면 도움이 될 것입니다. 나는 소스 코드를 찾고에서 파생 할 수 있는지부터

:

  • 리터럴 플래그에 관계없이 다른 모든 플래그의 하지 세트 인 경우, 어떤 \의 Q를 찾습니다 ... \ E 블록을 인용하고 수동으로 예상 한대로 특수 문자를 수동으로 이스케이프 처리합니다. 리터럴 플래그를 설정하면

  • , 그것은 newSlice 방법을 사용하여 전체 패턴을 변환하며, 적어도 CASE_INSENSITIVE 플래그와 UNICODE_CASE 플래그 그대로 질문을 감안할 때

+0

당신은 "그렇습니다"라고 말했지만 그 이유는 없습니다. 그리고 저는 유연성에 대해서 알고 있습니다. – maaartinus

+0

@maaartinus 증명할 예제를 작성하려고했습니다. :-) –

관련 문제