2013-06-13 2 views
0

비슷한 결과를 얻으려고하면 Java 문자열 리터럴에 있습니다. 그 중 두 개가 있으면 \, 그렇지 않으면 뒤 따르는 모든 것을 "이스케이프"합니다. 따라서 단일 릴리스 문자 뒤에 오는 구분 기호가 있으면 계산에 포함되지 않습니다. 그러나 두 개의 해제 문자는 해제 문자 리터럴로 해결되므로 다음 구분 기호는 구분 기호로 간주되어야합니다. 따라서 홀수의 릴리스 문자가 구분 기호 앞에 오는 경우 무시됩니다. 0 또는 짝수의 경우 구분 기호입니다. 따라서 아래 코드 예제에서 :Java 정규 표현식을 사용하여 구분 기호를 찾으려면

?: <- : is not a delimiter 
??: <- : is a delimiter 
???: <- : is not a delimiter 
????: <- : is a delimiter 

다음은 작동하지 않는 샘플 코드입니다.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestPattern 
{ 
    public static void main(final String[] args) 
    { 
     final Matcher m = Pattern.compile("(\\?\\?)*[^\\?]\\:").matcher("a??:b:c"); 
     m.find(0); 
     System.out.println(m.end()); 
    } 
} 
+0

작동합니다 \\ : 첫째, 다음 "?의 모든 짝수는"트릭을 할 것 같다? ?) + :' – Bohemian

+0

아니요. 본문을 읽으면 내가하고 싶은 것을 볼 수 있습니다. 아무 것도 없을지도 모릅니다. 전혀하지만 구분 기호와 일치해야합니다. 이스케이프 처리되지 않은 구분 기호와 일치해야합니다. – mentics

+1

나는 무엇을하려고하는지 잘 모르겠습니다. 몇 가지 예를 게시하고 일치/찾으려는 대상과 생략하려는 대상을 보여주는 몇 가지 결과를 게시 할 수 있습니까? 또한'?'와':'사이의 관계는 무엇입니까? 구분 기호 란 무엇입니까? 구분 기호가 짝수 개의 물음표와 콜론으로 설정된 경우'[\ \? \ *?]'부분없이'(\\? \\?) * :'를 사용해보십시오. – Pshemo

답변

0

정규 표현식을 뒤집어서 사용하는 것처럼 보입니다. 퍼팅 "일치하지 않는?"

[^?](\\?\\?)*:

0

귀하의 정규식 의미 :

0 개 이상의 '?'

(\\?\\?)* 

다음에 '?'가 붙지 않습니다. 에 종료

[^\\?] 

는 ':'

\\: 

그래서, 당신의 마지막 경기는 마지막 대장이다.

final Matcher m = Pattern.compile("((\\?){2})+").matcher("a??:b:????:c"); 
while (m.find()){ 
    //outputs 1 and 6, places 
    //you would have to start 
    //scaping... 
    System.out.println(m.start()); 
} 
0

* 해당 그룹의 제로가 될 수 있다는 것을 의미합니다 : 오프셋 결과는 6

이유는 당신이 변경 될 수 있습니다. 따라서 캡처 그룹은 빈 문자열이 될 수 있습니다. [^\\?]?이 아닌 문자 일 수 있습니다. ?은 문자 클래스 내 특수 문자가 아니기 때문입니다. \은 무시됩니다.

따라서 (앞에 빈 문자열이있는) b:이 일치하고 두 번째 콜론이 마지막 (이 경우 첫 번째) 일치합니다.

나는 단지 "(\\?\\?)*\\?:"을 원한다고 생각합니다.

1

이 다음은 \\ (`내가 원하는 생각

\b(\?{2})*: 
관련 문제