php
  • regex
  • perl
  • 2016-09-02 11 views 0 likes 
    0

    私は、そのコードの前にコメントが付いていない限り、いくつかのコードのすべての出現箇所を見つけようとしています。正規表現以外のコメント

    は、ここで私が検索したいものの例です:

    $page_content .= '<meta http-equiv="refresh" 
    

    にて、または空白の前にせずに

    $page_content .= 'Some other text here</p><meta http-equiv="refresh" 
    

    。 は、ここで私はとか、空白の前にすることなく、再び

    //$page_content .= '<meta http-equiv="refresh" 
    

    を無視したいものです。

    そのようにすれば、コメントに含まれていない限り、自分のコードベースにこのコードが含まれていないことを確かめることができます。また、コメントアウトしたときに偽の警告を出さずに自動アラートを設定します)。

    私は

    (?<!\/\/).*<meta http-equiv="refresh" 
    

    の後ろを見て使ってみましたが、私はこれはまだ、すべての出現にマッチするコメントやないと多くの幸運を持っていませんでした。

    もうひとつ:Notepad ++やreg exp検索をサポートする他のエディタで検索できるように、コードのループではなく、ある正規表現にあった方が良いでしょう。 (1つの質問がどれだけ読んで理解できるかは驚くほどですが、私はかなりわかりましたが、完全に有効な回答の多様性から、もっと多くの詳細を含めることができるという明確な理由から:-)

    +0

    あなたは '貪欲演算子を使用している検討してください。*' –

    +0

    '#^ [^ /] {2}。*#m'ができる文字列をチェックする前にコメントを削除 – JustOnUnderMillions

    +0

    '/ ^(?!\/\ /)/'あなたは負のマッチで試してみましたか? '//'で始まるものはすべて無視します。 –

    答えて

    -1

    質問で指定された入力の場合:あなたはより多くのスペースや他のインデントの演算子を持っている場合は、

    use strict; 
    
    use warnings; 
    
    
    open my $fh, "<", "my_path\\data.txt"; 
    
    while (my $line = <$fh>) { 
        if ($line =~ /^(?!\/\/).*?<meta http-equiv=\"refresh\"/){ 
         print $line; 
        } 
    } 
    

    ルックの背後にある演算子を使用します:

    //$page_content .= '<meta http-equiv="refresh" 
    

    これは事を行います は厳格な使用を。

    use warnings; 
    
    
    open my $fh, "<", "c:\\users\\uidp7702\\desktop\\data.txt"; 
    
    while (my $line = <$fh>) { 
        if ($line =~ /(?<!\/\/)\$page_content\s.=\s\'.*?<meta http-equiv=\"refresh\"/){ 
         print $line; 
        } 
    } 
    
    +0

    ありがとうございます。これは、インデントのない行または空白の前の行で動作するように見えます。しかし、インデントされていれば、それはすべてのものにマッチします。コメントもコメントも付けられていません。だから私は行の先頭^を取り除いていて、それでもすべてが一致しているので、^は^ \ s *と^ *のような空白で読み込まれましたが、それでもすべてが一致します。 – user3797323

    +0

    あなたの質問に入力のすべての亜種が指定されているはずです –

    +0

    これを反映するように質問を更新しました。私の考えは、これが正規表現であったため、前の空白やその後の空白、または前後の他のコードと一致するはずです。私が与えた例の行のための完全一致ではなく – user3797323

    0

    だけ

    while (<$fh>) { 
    
        s|//.*||; 
    
        if (/<meta http-equiv="refresh"/) { 
         ...; 
        } 
    } 
    
    関連する問題