3

perlを使用して、以下のテキストを含む大きなファイルを「丸呑み」しました$1。指定された正規表現のファイル内のすべての正規表現の一致をキャプチャしようとしています。私の正規表現は

=~ /((GET|PUT|POST|CONNECT).*?(Content-Type: (image\/jpeg)))/sgm 

現在、太字のテキストがキャプチャされていますが、最後のキャプチャは行を処理しています

"GET /~sgtatham/putty/latest/x86/pscp.exe HTTP/1.1" to "Content-Type: text/html; charset=iso-8859-1" 

最後のキャプチャの一部として、b/c「text/html」は私の正規表現キャプチャと同じではありません(image\/jpeg). なしで最後のキャプチャをキャプチャできるようにしたい

"GET /~sgtatham/putty/latest/x86/pscp.exe HTTP/1.1" to "Content-Type: text/html; charset=iso-8859-1" being included.

助けてくれてありがとう、ありがとう。

**GET /~sgtatham/putty/latest/x86/pscp.exe HTTP/1.1  
Host: the.earth.li  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: en-us,en;q=0.5  
Accept-Encoding: gzip, deflate  
Connection: Keep-Alive  
Content-Type: text/html; charset=iso-8859-1  
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  
<html><head>  
\.+"  
GET /~sgtatham/putty/0.62/x86/pscp.exe HTTP/1.1  
Host: the.earth.li  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: en-us,en;q=0.5  
Content-Length: 315392  
Keep-Alive: timeout=15, max=99  
Connection: Keep-Alive  
Content-Type: image/jpeg**  
Platform: Digital Engagement Platform; Version: 1.1.0.0  
4

1 に答える 1

3

で簡単に実行できます。これ(?!pattern)は否定的な先読みアサーションです。要約については、この記事を読んでください。肯定的および否定的な先読みの肯定的な例 (ourcraft.wordpress.com)

正規表現

$text =~ /
(                                 # start capture
    (?:GET|PUT|POST|CONNECT)      # start phrase
    (?:
        (?!GET|PUT|POST|CONNECT)  # make sure we'havent any these phrase
        .                         # accept any character
    )*?                           # any number of times (not greedy) 
    Content-Type:\simage\/jpeg    # end phrase
)                                 # end capture
/msx;
print $1;

すべてのオカレンス

while($text =~ m/REGEXP/msxg) {

    print $1;
}

出力

GET /~sgtatham/putty/0.62/x86/pscp.exe HTTP/1.1  
Host: the.earth.li  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101     Firefox/13.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: en-us,en;q=0.5  
Content-Length: 315392  
Keep-Alive: timeout=15, max=99  
Connection: Keep-Alive
Content-Type: image/jpeg
于 2012-07-07T06:29:20.693 に答える