2017-05-10 1 views
0

상당히 정규식 인이 정규식에 대한 솔루션을 찾기 위해 고심하고 있습니다. 다른 패턴과 일치하는 패턴과 일치해야합니다.PCRE 정규식 다음 패턴을 찾을 때까지 패턴 일치

는 나는이 캡처해야 "평균"그에서 "Keberos가-wsfed"다음 다음

Kerberos: 
    Historical: 
    Between 26 and 50 milliseconds: 10262 
    Between 50 and 100 milliseconds: 658 
    Between 101 and 200 milliseconds: 9406 
    Between 201 and 500 milliseconds: 6046 
    Between 501 milliseconds and 1 second: 1646 
    Between 1 and 5 seconds: 1399 
    Between 6 and 10 seconds: 13 
    Between 11 and 30 seconds: 34 
    Between 31 seconds and 1 minute: 7 
    Between 1 minute and 2 minutes: 1 
    Mean: 268, Mode: 36, Median: 123 
    Total: 29472 
Kerberos-wsfed: 
    Historical: 
    Between 26 and 50 milliseconds: 3151 
    Between 50 and 100 milliseconds: 129 
    Between 101 and 200 milliseconds: 650 
    Between 201 and 500 milliseconds: 411 
    Between 501 milliseconds and 1 second: 171 
    Between 1 and 5 seconds: 119 
    Between 6 and 10 seconds: 4 
    Between 11 and 30 seconds: 6 
    Between 1 minute and 2 minutes: 1 
    Mean: 176, Mode: 33, Median: 37 
    Total: 4642 

나는 일치시킬 수 있습니다 (:?, 내 말은 일치시킬 수 있습니다 : Kerberos를 wsfed :하지만 Kerberos-wsfed가 있지만 어려움이있는 경우 Mean의 값을 찾아야합니다. 도움을 주셔서 감사합니다.

답변

2

를 사용하여 정규 표현식

Kerberos-wsfed[\s\S]*?Mean: *(\d+) 

평균 값은 캡처 그룹 1에 포함되어 그 프로그래밍 언어에 따라 $1 또는 \1이다.

demo을 참조하십시오.

+0

horcrux, 나는 그것을 필요로 정확히 작업. 모두 함께 해줘서 고마워! – mrmiz

+0

@mrmiz, 최선의 답변을 선택하는 것을 잊지 마십시오. –

+0

'[\ s \ S] *?'는 JavaScript에서's' 플래그에 대한 지원이 없기 때문에 사용하는 해킹이므로 PCRE에서 사용할 필요가 없습니다. Juste는's'을 전체 패턴에 적용 할 수없는 경우 대신'(? s :. *?)'를 사용합니다. –

0

사용 캡처 그룹 :

  • [\s\S]* 그대로

    Kerberos-wsfed:[\s\S]*Mean:\s(\d+) 
    
    • Kerberos-wsfed: 리터럴 일치는
    • Mean:\s는 다음 리터럴 Mean 일치 (라인 delimitters 포함) 사이의 임의의 문자를 허용 공간 \s
    • 마지막으로 (\d+) 이는 w 첫 번째 캡처 그룹에서 랩핑하면 찾고있는 가치를 포착합니다. 그것은 본질적으로 $1 또는 언어를 기반으로 첫 번째 첫 번째 캡처 그룹에있을 것입니다 자리
    • Regex 101 Demo

      당신이 (176) 찾고있는 값

    의 수 있습니다. 당신이 파일 형식 슈어 있다면 당신은 단지 공간이나 \s 대신 \s+을 사용할 수 있습니다 #Kerberos-wsfed:.+?Mean:\s+(\d+)#s

    : PHP의 인스턴스의 경우 :

    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 
    
    echo $matches[0][1]; 
    // Output: 176 
    
  • 0

    시도는 정규식 포함을 사용합니다.

    176이 될 것입니다 일치하는 요소

    의 1 군에서

    데모 : https://regex101.com/r/gwkUPJ/1

    +3

    이 정규식은 "단일 행"모드에서만 작동하도록 지정해야합니다. – horcrux

    +0

    @horcrux, thx 귀하의 관찰을 위해. 업데이트되었습니다. –