2017-06-15 73 views
0

所以我PHP精確搜索

$q = $_REQUEST["q"]; 
$f = fopen("address.txt", "r"); 
while (($line = fgets($f)) !== FALSE) { 
    if (strstr($line, $q)) { 
     print "<li>found: $line"; 

可以說我有

Street 1 number 122 
Street 2 number 22 
address.txt

,我想搜索的號碼22

如何搜索22,而不是獲得122也?

在此先感謝。

+2

交從address.txt中..what一些示例文本是其對新行格式 –

+0

每 街1號122 街2號22 街3號65 – qqq123

+0

幼稚的解決辦法用空格包圍'$ q':'if(strstr($ line,'')。 $ q。 '「))' – Steve

回答

2

你可以使用正則表達式與word boundaries做到這一點。簡單的例子:

if(preg_match('/\b22\b/', $line)) { 

PHP演示:https://eval.in/817207
Regex的演示:https://regex101.com/r/y9slbd/1/

實施例使用輸入($q):

if(preg_match('/\b' . preg_quote($q, '/') . \b/', $line)) { 

http://php.net/manual/en/function.preg-quote.php

(儘管你的22示例不應該引起任何問題■如果串連成本示例)

+0

我不知道發生了什麼事該評論的OP離開這裏較早,其中一個說,工作。他們還沒有對[此評論](https://stackoverflow.com/questions/44567676/php-exact-search#comment76124262_44567676)我離開他們更早做出反應。 –

+0

我的例子,並與22的測試,所以我想這是工作...... 我需要使用的形式,以說什麼我尋找 – qqq123

+0

你可以通過'$ q'安全與正則表達式的http:/ /php.net/manual/en/function.preg-quote.php。 – chris85