php
  • regex
  • preg-match
  • 2017-12-23 25 views 1 likes 
    1

    제발, 나는 올바른 정규식을 만드는 데 도움이 필요합니다.무엇이든간에 일치하는 정규식

    나는 내게 많은 노력이 출력 2%65%66%_WHATEVER_8%74%74

    를 제공하기 위해 어떤 ")Decode(" 사이를 감지하고 싶지만, 아무것도 나에게 내가 원하는 정확한 출력을 제공하기 위해 제대로 작동하지 않습니다.

    내 코드 :

    코멘트에 명시된 바와 같이
    $string = ' 
        <td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td> 
        <td class="green"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td> 
        <td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td> 
    '; 
    $pattern = '/Decode("([^*]+)")/i'; 
    preg_match_all($pattern, $string, $matches); 
    
    print_r($matches[1]); 
    

    답변

    1

    , 당신은

    Decode\("([^"]+)"\) 
    

    를 사용하여 첫 번째 그룹이 걸릴 수, a demo on regex101.com를 참조하십시오.


    데모 PHP로 : 당신의 입력 문자열을 기반으로

    <?php 
    
    $data = <<<DATA 
    <script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script> 
    DATA; 
    
    $regex = '~Decode\("([^"]+)"\)~'; 
    
    if (preg_match_all($regex, $data, $matches)) { 
        print_r($matches[1]); 
    } 
    
    ?> 
    
    1

    , 당신은 단지 다음과 같은 패턴이 필요합니다 : 당신의 표적 따옴표 문자열이 유일하기 때문에

    /\("\K[^"]+/ 
    

    이 간단한 패턴은/적절한 정확 앞의 (으로 식별됩니다.

    preg_match_all()은 전체 문자열 일치 ([0])에서 원하는 부분 문자열을 제공합니다. 이것은 캡처 그룹을 사용하는 것보다 출력 배열이 더 빠르게 bloating되지 않습니다.

    \(은 "리터럴 괄호"를 의미합니다. 백 슬래시가 없으면 정규 표현식은 사용자의 의미를 잘못 해석하고 (을 "이 시점부터 캡처 시작"으로 간주합니다.

    \K은 전체 문자열 일치를 다시 시작합니다.

    [^"]+은 하나 이상의 비 - 큰 따옴표 문자와 탐욕스럽게 매치되며 큰 따옴표가 나오기 직전에 중지됩니다. 이것은 negated character class입니다. 이들은 종종 정확도를 유지하면서 효율성을 향상시키는 데 사용됩니다.

    코드 : (데모 : https://3v4l.org/UmaaC)

    $string = ' 
    <td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td> 
    <td class="green"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td> 
    <td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>'; 
    $pattern = '/\("\K[^"]+/'; 
    preg_match_all($pattern, $string, $matches); 
    
    print_r($matches[0]); 
    

    출력 :

    Array 
    (
        [0] => 2%65%66%_WHATEVER_8%74%74 
        [1] => 2%65%66%_WHATEVER_8%74%74 
        [2] => 2%65%66%_WHATEVER_8%74%74 
    ) 
    

     관련 문제

    • 관련 문제 없음^_^