2012-05-20 5 views
1

regexps에 대한 간단한 질문. 나는 Java Regexp Matcher

String text = "foobar1foobar1"; 

있어 그리고 내가 그런 일 할 때는 먼저 1 (는 foobar) 전에 일부를 얻을 필요가 :

Pattern date_pattern = Pattern.compile("(.+)1"); 
Matcher matcher = date_pattern.matcher(text); 
matcher.group(1); 

을하지만 "foobar1foobar"을받을.

답변

7

한정자 + 한정 기호는 욕심이 많으므로 최대한 일치합니다. 이 수량 한정자 reluctant version+?; 귀하의 패턴은 다음과 같습니다 :

(.+?)1 
2

욕심 많은 욕심없는 정규 표현식. .+은 욕심이 많으며 가능한 한 가장 긴 시간 동안 경기를합니다. ?을 추가하면 욕심을 가지지 않게됩니다. .+?

예를 들어 정규식이 필요하지는 않지만 단지 예제 일뿐입니다. 대신 당신은 당신의 예를 함께 할 수있다 :

String firstPart = text.substring(0, text.indexOf('1')) 

심지어 (매우 간단) 정규 표현식을 분할에 :

String firstPart = text.split("1")[0] 

은 모두 대부분의 사람들 정규 표현식보다 쉽게 ​​읽을 수있다. 거기에 "1"이 없다면 조심하십시오.

1

대안 분리 기능을 이용하여 할 수있다 :

String s="foobar1foobar2"; 
String[] splitted = s.split("1"); 

검색중인 문자열에 스플릿 [0].