2015-02-27 2 views
1

Я пытаюсь захватить только имена пользователей в списке предложений длиной около 30 строк. Я могу получить его, чтобы захватить имена пользователей и все после этого, но я не хочу получать все после имени пользователя.PHP Захватите определенное слово и проигнорируйте остальное в строке

test.txt

[India] Hagiwara has been inactive for 33 days (last seen: Sun Jan 25 23:35:35 2015). 
[India] Psyborg has been inactive for 35 days (last seen: Fri Jan 23 18:43:58 2015). 
[Echo] Pela has been inactive for 31 days (last seen: Tue Jan 27 20:00:30 2015). 

PHP

$data = file('test.txt'); 

foreach ($data as $lines) { 

if (($pos = strpos($lines, "]")) !== FALSE) { 
    $string = substr($lines, $pos+1); 
} 

echo $string . '<br />'; 
} 

Выход

Hagiwara has been inactive for 33 days (last seen: Sun Jan 25 23:35:35 2015). 

ответ

2

Это может быть больше, чем вы ожидали, но здесь это способ избежать регулярных выражений.

$string = substr($lines, $pos+2); 
$string = substr($string, 0, strpos($string, ' ')); 
1

Учитывая ваш пример строки и основаны на предположении о том, что имя пользователя никогда не будет содержать пробельных символов:

<?php 
$input_line = "[India] Hagiwara has been inactive for 33 days (last seen: Sun Jan 25 23:35:35 2015)."; 
if (preg_match("/\[.+\]\s*(\S+)\s*.*/", $input_line, $output_array) == 1) { 
    echo $output_array[1]; 
} 
?> 

печатает «Хагивара».

0

Regex сделать это не так сложно. Это более пуленепробиваемым имхо

$str1 = '[India] Hagiwara has been inactive for 33 days (last seen: Sun Jan 25 23:35:35 2015).';

$str2 = '[India] Psyborg has been inactive for 35 days (last seen: Fri Jan 23 18:43:58 2015).';

$str3 = '[Echo] Pela has been inactive for 31 days (last seen: Tue Jan 27 20:00:30 2015).';

$strs = array($str1,$str2,$str3);

foreach ($strs as $key => $val) {

//strips the initial bracketed string from the beginning of the line 
    $trimmed_val = preg_replace("/^\[\w+\]\s/",'',$val); 

    //grabs the first word from the trimmed string (user in this case) 
    preg_match("/^\w+\s/",$trimmed_val,$users); 

    //prints out a list of users for demonstration 
    echo $users[0] . '<br/>'; 

}

Смежные вопросы