2012-10-17 2 views
2

텍스트 영역 내에서 URL을 가져 오는 코드가 있습니다. 내가 '+'과 함께 URL을 시도하기 전까지는 잘 작동했습니다. Java Regex Escape

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)"); 
Matcher matcher = pattern.matcher(text); 

그래서 난 내 코드에서 \\+\\\\+ 퍼 팅 시도했지만 작동하지 않았다. 그래서 일부 인터넷 검색 및 스택 오버 플로우 문제 그러나이 사람

Pattern.quote("+"); 

을 언급 보관했다, 나는 내가 현재 지금 무슨에 그 문을 구현하는 방법을 모르겠습니다. 그것이 내가 가고 싶은 길조차 있다면. 그러나 나는이 같은 것을 할 필요가 있다고 가정하고 있습니다 ...

String quote = Pattern.quote("+"); 
Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z]*)(.*)"); 
Matcher matcher = pattern.matcher(text); 

그런 다음 변수 어구를 패턴 어딘가에 추가 하시겠습니까? 도와주세요! 나는 방금이 물건을 배웠다. 나는 그것에 아주 새로운 것이다. 고맙습니다?

답변

1
(https?[://.0-9-?a-z=_#!A-Z]*) 

곰을 인용 탈출하고 있음이 그 안에 모든 문자가 포함된다는 것을 의미합니다. [aegl]+는 "나이", "A", "E"g ","독수리 "와"경도 "를 일치합니다. 또한 (같은 /)가 완전히 중복 문자가 두 번 나열 것을 의미한다.

Pattern.quote 유용하지만 어떤 특수 문자 앞에 백 슬래시와 같은 문자열을 반환합니다. Pattern.quote("+")\+를 반환합니다. + 대괄호 사이에 의미가 없습니다

때문에, 당신은 대괄호 안에 + 이스케이프를 넣을 수 있어야합니다. 그 때 기분이 나아질 경우 \\을 추가 할 수도 있습니다.

는 여기를 참조하십시오 http://fiddle.re/0780

+0

설명해 주셔서 감사합니다. 많은 것들이 나와 꽤 많이 배웠습니다. 불행히도 이것은 콘솔에서 훌륭하게 작동하는 것처럼 보이지만 매번 내 웹 응용 프로그램에서 고장납니다. 어떤 이유로 + 기호가 싫어서 읽을 수 없습니다. 이유를 이해하지 못합니다. – gmustudent

+0

@gmustudent 소리가 까다 롭습니다. [SO 채팅방] (http://chat.stackoverflow.com/rooms/18144/regex)에서 도움을 줄 수 있습니다. –

3

[] 문자의 클래스를 나타내는 것을 명심 예를 들어, \

Pattern pattern = Pattern.compile("(.*)(https?[://.0-9-?a-z=_#!A-Z\"]*)(.*)"); 
+0

는'//'도 제거합니다. a) \\ 여야하고, b) 문자 클래스 내에서 도트를 벗어날 필요가 없습니다. – Bohemian

+0

이렇게 하시겠습니까? 패턴 패턴 = Pattern.compile ("(. *) (https? [: // a-z = _ #! A-Z \"quote \ "] *) (. *)"); – gmustudent

+0

@ 보헤미안, 이해가 안되네. 왜 당신은'//'을 제거하겠습니까? 나는 그것이 점들을 벗어나지 않았다고 생각한다. –