php
  • regex
  • 2016-10-06 7 views 0 likes 
    0

    私は正規表現で何かしていますが、以下のコードは何とか私のコンピュータでは動作しません。私はXAMPPパッケージを使用しています。しかし、私はこのウェブサイトで私のPHPコードを確認したときにhttps://ideone.com/nFkBnCが働いていた。なぜこれが起こっているのですか?PHPコードが動作しないxampp

    <?php 
    $single="<div id='quote'> 
    
    </br><input onclick='this.select();' id='selectable' value='User 
    '></br><div class='content'> 
    ^^^^^ MILAN TODAY ^^^^^ 
    
    
    
    4 
    -4- 
    4444 
    44444 
    444444 
    4444444 
    44444444 
    444444444 
    *3333333333* 
    444444444 
    44444444 
    4444444 
    444444 
    44444 
    4444 
    444 
    44 
    4 
    * 
    # 670 # (((30))) # 370 # 
    
    # 789 # (((40))) # 370 # 
    
    ***gl*** 
    </br></div></div>"; 
    
    if (preg_match('/(\R4{3,4}\D44\D)/', $single, $double)) { 
         echo "working"; 
    } 
    
    ?> 
    

    このコードは、このサイトでは「動作中」と表示されていますが、パソコンではfalseです。

    +1

    あなたが "動作しない" とはどういう意味ですか:へ? –

    +2

    私は、コードがあまりにも長いコーヒー休憩を取っていると思っているだけで、そのシャベルに傾いたり、レーキとチャットしたりしています...悪い従業員のように聞こえます。 –

    +0

    動作している場合はエコーする必要がありますが、そうでない場合はエコーする必要があります。 – Hutarsh

    答えて

    1

    Windowsでは、改行は、改行後の復帰改行:CR + LFという2つの文字を表します。パターンベースのユーティリティで作業する場合、この2つの文字はほとんど表現方法が1つある\r\nです。 LF

    のLinuxの上にホスト上でスクリプトを実行している間、あなたの正規表現\Dは改行\n\x0A)とすぐに44を一致させることが可能であるため、作品\R4{3,4}\D44\D:しかし、Unixライクなシステムは、1つの文字で改行を表します一致します。

               Here 
                  _________ 
                  |   | 
        4 4 4 4 . 4 4 4 . 4 4 
    ^^^^^^^^^^^
    \x04 \x04 \x04 \x04 \x0A \x04 \x04 \x04 \x0A \x04 \x04 
    

    ただし、Windowsの場合は少し異なります。 \Dは(\x0D)に一致しますが、LF\x0A)のエンジンはすぐに44を検索するため、一致しません。だからパターン全体が失敗する。

                 Here 
                   ______________ 
                   |    | 
        4 4 4 4 . . 4 4 4 . . 4 4 
    ^^^^^^^^^^^^^
    \x04 \x04 \x04 \x04 \x0D \x0A \x04 \x04 \x04 \x0D \x0A \x04 \x04 
    

    私はは、Linuxホスト上のstrlen()の出力であり、がWindowsホストから来たと考えている、ことを言います。基本的な数学は、あなたの入力文字列の新しい行の数が同じである数の結果:

    379 - 347 = 32 // CR characters in Windows OS 
    

    をしかし、あなたは\R4{3,4}\D{1,2}44\Dにあなたの正規表現を変更した場合、あなたはそれが動作したり、改行だけを意味している場合、あなたが実際にそれを変更する必要があります表示されます試合

    \R4{3,4}\R44\R 
    

    \R改行のいずれかの種類(すなわち+ LFCRLFCR、...)

    +1

    ありがとうございました。これは私のために働いて、私は正規表現についてもっと理解しました。 :) – Hutarsh

    関連する問題