2013-07-09 3 views
3

나는 다른 정규 표현식의 수천하고는 다음과 같습니다 :정규식에서 일치하는. *을 어떻게 얻을 수 있습니까?

 
^Mozilla.*Android.*AppleWebKit.*Chrome.*OPR\/([0-9\.]+) 

가 어떻게 정규식에서 .*과 일치하는 문자열을 얻을 수 있습니까? 예를 들어, 위의 정규 표현식에 대해 나는 4 개의 서로 다른 하위 문자열에 대해 4 개의 서브 문자열을 얻습니다. .*. 덧붙여, 나는 주어진 정규 표현식 문자열에 대해 간단한 연산을 수행하여 알아낼 수도 있지만, 프로그램에 더 많은 복잡성을 부과 할지라도 사전에 얼마나 많은 문자가 있는지 모른다. 상당히 많은 양의 데이터를 처리하므로 여기서는 효율성에 중점을 둡니다.

답변

5

.*(.*)으로 바꾸고 matcher.group(n)을 사용하십시오. 예를 들어 다음 (.*)의 경기가 반환 된 방법

Pattern p = Pattern.compile("1(.*)2(.*)3"); 
Matcher m = p.matcher("1abc2xyz3"); 
m.find(); 

System.out.println(m.group(2)); 
 
xyz 

공지 사항 (m.group(2)부터 사용되었다). 당신은 당신이 .* 당신의 정규식이 포함됩니다이야 얼마나 많은 알 수 없습니다 언급 한 이후

또한, 귀하의 정규식에서 유일하게 캡처 그룹이 실제로 (.*)의 것입니다 경우, 사용할 수있는 matcher.groupCount() 방법이있다.

자신의 깨달음을 위해서 capturing groups에 대해 읽으십시오.

3

정규 표현식에서. *와 일치하는 부분 문자열을 어떻게 구할 수 있습니까? 예를 들어, 위 정규식의 경우, 4 개의 다른 DOT STAR에 대해 4 개의 하위 문자열을 얻습니다.

사용 그룹 : (.*)


I뿐만 아니라, 내가 모르는 사전에 많은 DOT 별

다음과 .* 교체, 정규식 문자열을 빌드가 얼마나 (.*) :

String myRegex = "your regex here"; 
myRegex = myRegex.replace(".*","(.*)"); 

나는 가능한 주어진 정규식 문자열에 몇 가지 간단한 작업을 수행하여 그것에 대해 알 수 있지만 방법을 모르는 경우이 프로그램

에 더 복잡성을 부과에도 불구하고 정규식이 만들어지고 정규식이 응용 프로그램에 의해 작성되지 않은 경우, 유일한 방법은 처리 한 후에 처리하는 것입니다. 정규식을 작성하는 경우 .*

+1

을 덧붙이는 대신 (.*)을 덧붙입니다. 글 머리 기호를 물어 뜯고 정규식을 처리해야한다는 점에 더하여 필자도 작성했으면 좋겠다. 그래서 오직 하나의 정규 표현식 만 있고 한번만 처리하면되므로 시스템 자원을 많이 소모하지 않을 것입니다. 아주 긴 정규식이라 할지라도 문자열 자체보다 길 수는 없습니다.반면에, 당신은 각 문자열에 대해 다른 정규 표현식을 사용하고 있다면, 아마 잘못했을 것입니다. –

관련 문제