2015-08-14 2 views
0

У меня есть следующая строка:PHP - stristr найти точную строку

P90 | Ash Wood (Well-Worn) 

Я передаю это через следующий:

$item = str_replace("|","", $item); 
$item = str_replace(" (","-",$item); 
$item = str_replace(")","",$item); 
$item = str_replace(" ","-",$item); 
$item = str_replace("--","-",$item); 
$item = str_replace("™","",$item); 
$item = str_replace("★-","",$item); 
$item = str_replace("★","",$item); 

который возвращает:

P90-ASH-WOOD-WELL-WORN 

Я m теперь сравнивая эту строку с файлом строк, чтобы найти соответствие:

$lines = file(public_path().'/csgoanalyst.txt'); 
foreach ($lines as $line) { 
    // Check if the line contains the string we're looking for, and print if it does 
    if (stristr($line, $item)) { // case insensitive 
     echo $line; 
     break; 
    } 
} 

Проблема у меня есть файл содержит follownig:

http://csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN 
http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN 

оба строк содержат матчи для них являются и действительными, однако я ищу точное соответствие - в этом случае второго URL.

+4

Является 'если (stristr ($ строка, '/' + $ пункт))' применимы в этом случае? Разумеется, лучше сделать это заранее. – raina77ow

+0

Попробуйте использовать preg_match как '/ (?

+0

Нет как '$ line = 'http://csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN'' и '$ item = 'P90-ASH-WOOD-WELL-WORN'' – user3662307

ответ

1

попробуйте использовать preg_match в

$lines = file(public_path().'/csgoanalyst.txt'); 
foreach ($lines as $line) { 
    // Check if the line contains the string we're looking for, and print if it does 
    if(preg_match('/(?<!\-)(P90\-ASH\-WOOD\-WELL\-WORN)\b/',$line)) { // case insensitive 
     echo $line; 
     break; 
    } 
} 

Demo

0

Добавить этот небольшой код

  • Взрывающиеся линии с '/' в массив.

  • доступ к последнему значению массива с концом().

  • сравнивая это с переменной предмета, а затем печатает, если соответствует.

    foreach ($lines as $line) { 
        // Check if the line contains the string we're looking for, and print if it does 
        if (stristr($line, $item)) { // case insensitive 
         $lineArr = explode('/', $line); 
         if(end($lineArr) == $item) 
         { 
         echo $line; 
         break; 
         } 
        } 
    } 
    
+0

'print_r ($ lineArr); Array ([0] => http: [1] => [2] => csgo.steamanalyst.com [3] => id [4] => 2018 [5] => SOUVENIR-P90-ASH-WOOD-WELL-WORN) ' – user3662307

+0

что вы пытаетесь передать? –

0

Я попытался это ...

<?php 
     $item = "P90-ASH-WOOD-WELL-WORN"; 
     $lines = array(
      "http://csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN", 
      "http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN-TEST", 
      "http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-TEST-WELL-WORN", 
      "http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN" 
     ); 

     foreach ($lines as $line) { 

      echo "checking: ".$line."<br/>"; 

     // Check if the line contains the string we're looking for ... 
      if (stristr($line, $item)) { // case insensitive 
       $line_as_array = explode('/', $line); 
       if (end($line_as_array) === $item) { // check two string are same 
        echo "matched: ".$line."<br/>"; 
        break; 
       } 
      } 
     } 
     ?> 

и нашел результат как ...

checking: http://csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN 
checking: http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN-TEST 
checking: http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-TEST-WELL-WORN 
checking: http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN 
matched: http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN 

кажется работает ...

+0

Это все еще использует 'http: // csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN', а не' http://csgo.steamanalyst.com/id/919/P90- ASH-WOOD-WELL-WORN' – user3662307

+0

странно !!! как? –

0

Мой ответ использовать конец, чтобы только захватить последнюю часть строки explode'd, а затем preg_match его с помощью^и $ для обозначения начала и конца строки, которую вы хотите сопоставить. Так что ничего с чем-то на фронте или в конце не будет соответствовать. Будут работать только точные совпадения.

<? 
$item = "P90-ASH-WOOD-WELL-WORN"; 
$list = array("http://csgo.steamanalyst.com/id/2018/SOUVENIR-P90-ASH-WOOD-WELL-WORN","http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN"); 

foreach ($list as $line) 
{ 
    if (preg_match("/^$item$/",end(explode("/",$line)))) 
    { 
     echo $line; 
     break; 
    } 
} 
?> 

результат:

http://csgo.steamanalyst.com/id/919/P90-ASH-WOOD-WELL-WORN 
Смежные вопросы