2017-05-08 40 views
1

當我嘗試使用正則表達式執行過濾器時,我總是收到空結果。我試圖從其中包含一個表單輸入參數的HttpRequest,麻煩的是,它沒有張貼任何我可以看到過濾特殊字符,正則表達式特殊字符的問題

我的代碼看起來像這樣

<?php 
$string = 'POST /login.php HTTP/1.1 
Host: www.copyscape.com 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/20100101 Firefox/53.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 
Referer: http://www.copyscape.com/login.php 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 74 
Cookie: ck=BXLD2UDMUA88KWGC0GK8WCGOC; PHPSESSID=8cup5f02hbetnbfbbv9vug37q0 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 

login_username=jeezman88%40vfxm.mail.com.com&login_password=(Passw0rd)&log_in=Log+inÿÿÿ7—R'; 

preg_match('/=\/&\$\%/',$string, $match); 
echo $match[1]; 
?> 

現在我似乎沒有明白爲什麼它不給出任何信息從這裏判斷 編輯:我想過濾和使用preg_match()從文本回顯此參數,我怎麼去呢?

login_username=jeezman88%40vfxm.mail.com.com&login_password=(Passw0rd)&log_in=Log+inÿÿÿ7—R 

https://eval.in/789197

PLS幫助

+0

你是否試圖將整個字符串匹配到最後? – Pavel

+0

@Pavel是這就是我一直在努力實現 – RealMary

+0

檢查我的答案。這個對我有用。 – Pavel

回答

0

要匹配

login_username=jeezman88%40vfxm.mail.com.com&login_password=(Passw0rd)&log_in=Log+inÿÿÿ7—R 

嘗試use this regex

preg_match_all('/login_username=.*$/m',$string, $match); 
print_r($match[0]); 

它與login_username=開始到行結束整個字符串匹配。請注意,正則表達式使用m -multiline修飾符。

它看起來像你試圖匹配整個POST正文。您可以使用this regex for that

preg_match_all('/(?:\n\r?){2,}((?:.|\r|\n)*)/',$string, $match); 
var_dump($match[1]); 
+0

我看到它,並感謝,但如果它是一個隨機的網頁,沒有這個login_username作爲窗體參數,什麼我要做嗎?我在 – RealMary

+0

之前還沒有完成正則表達式謝謝正是我需要的!必須從preg_match_all更改爲preg_match,並且使用您的正則表達式,所有內容都非常棒! – RealMary

0

索引錯誤在$匹配, 檢查: https://eval.in/789215

讀: http://php.net/manual/en/function.preg-match-all.php

結果是匹配的陣列,[0] - 整個正則表達式匹配,[> 1] - 組匹配。由於您沒有大括號() - 索引> 1的結果爲空。

+0

現在我該如何處理它以迴應此login_username = jeezman88%40vfxm.mail.com.com&login_password =(Passw0rd)&log_in = Log +inÿÿÿ7-R – RealMary

+0

preg_match_all(「/ login_username =([^&] *)&login_password = ([^&] *)&log_in =(。*)?/,$ str,$ matches); $ unames = $ matches [1]; $ pwd = $ matches [2]; – 2oppin

+0

解析錯誤:語法錯誤,文件在/ tmp/execpad-aa829283bb74/source-aa829283bb74中的意外結束,從這裏開始第17行https://eval.in/789248 – RealMary

0

我覺得你的正則表達式按預期工作,但你正在訪問$match稍微不正確。比賽看起來是這樣的:

array(1) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(1) "%" 
    } 
} 

如果你的正則表達式不匹配,它會是這樣的:

array(1) { 
    [0]=> 
    array(0) { 
    } 
} 

好像你正在尋找的是array_key_exists(0, $match[0])

0

編輯這些2個字段:

preg_match_all('/[=\/&\$\%]/',$string, $match); 
var_dump($match[0]); 

https://eval.in/789238

+0

我希望它過濾此部分login_username = jeezman88%40vfxm.mail.com.com&login_password =(Passw0rd)&log_in = Log +inÿÿÿ7-R並回顯它。 – RealMary

+0

然後只將該部分放在'$ string'中 –