Pattern
클래스에는 정규식의 두 가지 유형이 있습니다 : 캡쳐과 비 캡쳐이지만 차이점을 이해하지 못합니다.캡처 패턴과 캡처하지 않는 패턴의 차이점은 무엇입니까?
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#special
그들은 어떻게 다른가? 언제 각각 하나씩 사용해야합니까? 어떤예요?
Pattern
클래스에는 정규식의 두 가지 유형이 있습니다 : 캡쳐과 비 캡쳐이지만 차이점을 이해하지 못합니다.캡처 패턴과 캡처하지 않는 패턴의 차이점은 무엇입니까?
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#special
그들은 어떻게 다른가? 언제 각각 하나씩 사용해야합니까? 어떤예요?
한 위치에서 여러 가지 항목을 확인해야하는 패턴 (예 : 다른 두 개의 문자 패턴)을 고려해보십시오.
/(ab|cd|ef)/
뿐만 아니라 ()
브래킷의 사용을 필요로 : 일반적으로 당신은 |
교대 연산자를 사용합니다. 그러나 그 괄호는 또한 캡쳐 그룹의 역할을합니다. 아마 당신은 정말, 그 문자 시퀀스를 캡처 비 캡처 그룹이 역할을하는 곳 그냥 자신의 존재를 확인하고 싶지 않은 :
/(?:ab|cd|ef)/
어쩌면 나는이 질문을 이해하지 못한다. 그러나 나는 이것이 어떻게 설명 하는지를 고심한다. 나에게 그것은 "당신이 캡처하고 싶을 때 정규 표현식을 사용합니다 ..."와 같이 읽습니다. * 캡쳐 * 그룹 *이 무엇인지 아는 것이 문제가되지 않는다면, "아이팟은 언제 사용합니까?" – phant0m
당신은 할 수 있습니다 표현 독립적으로 을의 그룹 캡처 뭔가. 예를 들어 :
abc(foo|bar)def
는 "abdfoodef"또는 "abcbardef"하지만 다른 변화 중 하나와 일치 할 경우,이 간단한 표현이다. 두 개의 표현식을 그룹화하여 을 사용하려면 ()
을 사용해야했습니다. 그러나 이는 또한 (foo|bar)
이 첫 번째 캡처 그룹임을 의미합니다. 당신이 원하는 또는 캡처가 필요하지 않은 경우
가하는 비 캡처 그룹로 쓰기 :
abc(?:foo|bar)def
캡처/비 캡처는 전체 정규식을 참조하지 않고, 그룹, 예 : 괄호 안의 표현.
는는 예 경우에, 당신은 캡처 그룹을 원할 것입니다.
하지경우에, 당신은 우선 순위 제어 괄호를 사용하고 그룹 이외의 캡처를 할 수 있습니다.
캡쳐 그룹을 사용하면 정규식 일치 항목의 일부를 다시 사용할 수 있습니다.당신은 대체 성명에서, 예를 들어 나중에 정규 표현식 내에서 재사용하거나 할 수 있습니다 1a2b3cdef7g9h 이 정규식 :
이 텍스트를 고려 ([0-9] *) ([AZ] *) 두 캡처있다 그룹은 첫 번째 문자 시퀀스를 캡처하고 두 번째 문자 시퀀스를 캡처합니다.
replaceAll 문을 사용하면 첫 번째 캡처 그룹 ($ 1)을 사용하여 숫자를 유지하거나 두 번째 문자 ($ 2)와 문자를 유지할 수 있습니다.
// next line outputs : 12379
System.out.println("1a2b3cdef7g9h".replaceAll("([0-9]*)([a-z]*)", "$1"));
// next line outputs : abcdefgh
System.out.println("1a2b3cdef7g9h".replaceAll("([0-9]*)([a-z]*)", "$2"));
하지만 추가하여 (예를 들어 비 캡처 그룹을 사용하는 경우 : 그것은 캡처하지 않는, 예를 들면 그래서 가끔 유용입니다 :
// next line outputs : abcdefgh
// ([a-z]*) becomes the first capturing group because (?:[0-9]*) is a non-capturing group
System.out.println("1a2b3cdef7g9h".replaceAll("(?:[0-9]*)([a-z]*)", "$1"));
는 상기 http://gskinner.com/RegExr 에보십시오. 당신의 캡처 그룹은 당신이 볼 수있는 화면의 하단 곳
그냥 생각 나는 나를해야 당신은 또한과 같이 캡처 그룹 이름을 만들 수 있습니다 ntion :
(?<telephone>(?:\(\d{2}\)\s\d{4}\s\d{4}))
(02) 9502 5697
같은 전화 번호를 일치합니다 당신은 다음과 같이 역 참조로 사용할 수 있습니다
"s/(?<telephone>(?:\(\d{2}\)\s\d{4}\s\d{4}))/\k<telephone>/g"
어떤 그 경기 자체를 대체 하겠지만 ... 당신은 그걸로 창조적이 될 수 있습니다.
희망이 도움이됩니다.
역 참조를 사용하면 캡처 된 이미지를 참조 할 수 있습니다. –