2012-05-08 3 views
0

나는 그들에게 익숙하지 않고 자바 구문 "matches"에 문제가 있습니다.여러 정규 표현식

나는 지금은 정규 표현식 첫 번째 파일을 얻으려면 하나는 다른 하나는 Conf.xml.

입니다 111.123.399.555.xml 두 개의 파일이 있습니다.

string.matches("[1-9[xml[.]]]"); 

does not work.

어떻게 하시겠습니까?

+0

Java's Pattern docs.을 읽을 당신이'/ ([1-9] {3} \.) {4} XML /'하시겠습니까?를 – Bergi

+1

나는 진짜 간단한 개요를주기 위해 [blog post] (http://xisb.wordpress.com/2012/05/09/what-absolutely-every-programmer-should-know-about-regular-expressions/)를 썼다. 정규 표현식에서 모든 사람들이 알아야 할 절대적인 기초 더 자세한 내용을 이해하는 데 도움이 될지도 모릅니다. – stema

답변

6

[]은 캡처 그룹이 아닌 문자 클래스 그룹을 만들기 때문에 string.matches("[1-9[xml[.]]]");을 사용할 수 없습니다. 이 의미

자바에, 당신의 표현이 있다는 것입니다 "match any of: [1-to-9 [or x, or m, or l [or *any*]]]" 말 (* 모든 * 당신이 .를 탈출하지 않았고, 그것으로,이 a match any character 명령을 생성하기 때문에 여기에) 중요


을 :

"\"는 java에서 리터럴 이스케이프 문자로 인식되며 실제 일치 프로그램의 이스케이프 문자 ("\"이지만 문자열 형식 임)로 일치 프로그램에 전송되도록하려면 자체가 있어야합니다 따라서, "\"를 정규 표현 자에 사용하려는 경우에는 실제로 "\\"를 사용해야합니다.

당신이 그것을 사용하지 않는,하지만 보내, 정리해 때 조금 혼란 인 는 "\"를 정규로 일치 할 경우 는 "사용해야 할 수도 있습니다 실제 \\\\ "! 첫 번째 "\\"는 정규 표현식에 "\"가되고, 문자 문자와 두 번째 "\\"는 첫 번째 이스케이프 문자로 실제 "\"문자열이됩니다!


은 "#"는 항상 숫자됩니다 ###.###.###.###.xml 패턴과 일치하는 올바른 패턴 문자열, string.matches("(\\d{3}\\.){4}xml")이며, 다음과 같이 작동 방식은 다음과 같습니다

  • \\d = A 일치합니다 한 자리 문자. [0-9]을 사용하는 과 동일합니다.
  • {3}은 이전 \\d에 대해 "정확히 3 번"과 일치하는 것으로 지정합니다. 그러므로 일치하는 ###.
  • \\.은 단일 점 문자와 일치합니다.
  • 이전 코드를 포함하는 ()은 "이것은 캡처 링 그룹입니다"라고 말합니다. 일치 프로그램에 입니다. 다음 {4}에 의해 사용되므로 일치 항목 이 전체 ###. 그룹을 정확히 4 번 생성하여 일치 항목 ###.###.###.###.을 생성합니다.
  • 마지막으로 패턴 문자열 끝 부분의 xml은 정확히 "xml"과 일치합니다. 이전 항목에서이 패턴과 정확히 일치하는 패턴은 "###.###.###.###.xml"입니다. 추가 학습을위한

+0

대단히 감사합니다! – ctekk

+0

문법을 이와 같이 인식하는 방법 #. #. #. #. xml ??? (또한 ### #. ###. #. xml은 작동해야합니다.) – ctekk

+1

링크 덕분에 "(\\ d + \\.) {4} xml" – ctekk

1
string.matches("[1-9.]+\\.xml") 

해야합니다.

  • [1-9.]+은 1과 9 사이 및/또는 마침표 사이의 하나 이상의 숫자와 일치합니다. (+은 "하나 이상"을 의미하고, *은 "0 이상"을 의미하고, ?은 "0 또는 1"을 의미 함).
  • \.xml.xml과 일치합니다. .은 정규 표현식에서 "임의의 문자"를 의미하기 때문에 문자 그대로의 기간을 의미하기를 원한다면이 문자를 이스케이프해야합니다 : \. (자바 문자열이므로 백 슬래시 자체를 두 배로 이스케이프 처리해야 함).
+0

나 한테 이걸 조금 설명 할 수 있니? "+"와 "\\"는 무엇입니까? 또한 왜 거기에 "." "[1-9]" – ctekk

+2

내부에서 읽으십시오. http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html –

+0

this working : [1.-9 .] + \. xml 귀하의 도움과 설명에 감사드립니다. 받아 들일 것입니다. – ctekk