php
  • regex
  • preg-match
  • 2017-12-23 39 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])で目的の部分文字列を配信します。これは、キャプチャグループを使用する場合よりも速く、出力配列の膨張が少なくなります。

    \(は、 "リテラルの開き括弧"を意味します。バックスラッシュがなければ、正規表現はあなたの意味を誤って解釈し、(は「この時点からキャプチャを開始する」と解釈されます。

    \Kは、フルストリングマッチを再開します。

    [^"]+は、1つ以上の非二重引用符文字に貪欲に一致し、二重引用符が出現する直前に停止します。これは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 
    ) 
    
    関連する問題