2009-10-20 5 views
0

내가정규식 일치 질문

는 인용 부호를 제외하고는 정규식이 ""사이에 단지 어떤 일치 얻을 수있다

lotsofcrap "somethingimportant"moreotherstuff와 같은 문자열이 있다면? 그래서 방법은 "*."이 같은 것를 감지하는,하지만 "somethingimportant"를 반환합니다 오히려 정규식 엔진은 제로 폭 주장 (볼 비하인드을 지원하는 경우 순수한 somethingimportant

답변

4
"(.*)" 

캡쳐 그룹을 만들 때 괄호를 사용할 수 있습니다. 액세스 방법은 사용하는 언어/라이브러리에 따라 다릅니다. 일반적으로 캡처 그룹은 Perl과 유사한 언어로 $1 또는 \1으로 사용할 수 있습니다. 펄에서 예를 들어

'hello "world" !!!' =~ /"(.*)"/; 
print "$1\n"; 
+0

한 것은 27초 : – si618

+0

는 사실, 프로가 해결되지 않는 나를 이길 그룹에 괄호가 포함되지 않으므로 완전히 훼손됩니다. – si618

+0

고마워,이게 내가 찾고 있던거야. – mike

1

보다 look-aheads),

(?<=")[^"]*(?=") 

은 앞에 따옴표와 앞에 따옴표가있는 따옴표가없는 문자 시퀀스와 일치합니다.

그러나 이것은 바보입니다. 당신은 따옴표를 포함하여 단순히

"([^"]*)" 

경기의 모든 것을해야 다음 경기에서 1 군 (괄호 세트)를 당깁니다.

1

?"(.*?)" 필요에 따라이 경우 "(이 다음과 일치 할 때까지)에 .*)가 확장된다는 것을 의미보십시오

자바 코드를. :

static String regex = "\"(.*?)\""; 
static Pattern p = Pattern.compile(regex); 

public static List<String> getMatches(String inputText) { 
    Matcher m = p.matcher(inputText); 
    List<String> list = new ArrayList<String>(); 
    while(m.find()){ 
     list.add(m.group(1)); 
    } 
    return list; 
}