[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярное выражение для поиска строк
Painbot
Добрый день, ни как не могу справиться

есть файл в нем строки нужно вылавливать и доставать от туда

ссылки по сайту любого уровня например : sdu34hgd/dfgdi45.htm
и кириллические символы, то есть слова

строка имеет вид

sdu34hgd/dfgdi45.htm|1148749,1148750,1148751,1148782,1148783|русское слово, еще одно|11.11.2011|11.11.2011

между | и | могут данные как быть так и не быть smile.gif) тоесть

sdu34hgd/dfgdi45.htm|array|array|| или sdu34hgd/dfgdi45.htm||русское слово||

Давно не писал регулярок, вообще подзабыл, заранее спасибо.



Спустя 12 минут, 4 секунды (15.02.2012 - 10:57) Winston написал(а):
Так?
$str = '
sdu34hgd/dfgdi45.htm|1148749,1148750,1148751,1148782,1148783|русское слово, еще одно|11.11.2011|11.11.2011
sdu34hgd/dfgdi45.htm
'
;
preg_match_all('#.*/.*\.[^|\s]++#Uu', $str, $match);
echo '<pre>'.print_r($match, 1).'</pre>';

Спустя 18 минут, 1 секунда (15.02.2012 - 11:15) Painbot написал(а):
Спасибо большое! вот только страницы могут быть как третьего уровня так и вротого и 4 т и т.д. так и первого то есть eruihe34.htm

Спустя 28 минут, 53 секунды (15.02.2012 - 11:44) Painbot написал(а):
+ он забирает только ссылки, а нужно еще и русские слова

Спустя 17 минут, 46 секунд (15.02.2012 - 12:01) walerus написал(а):
А зачем так замарачиваться ?
$str = 'sdu34hgd/dfgdi45.htm|1148749,1148750,1148751,1148782,1148783|русское слово, еще одно|11.11.2011|11.11.2011';

list( $need_url, , $need_keywords ) = explode( '|', $str );

$need_url = parse_url( $need_url );
$need_keywords = explode( ', ', $need_keywords );


print_r($need_url);
print_r($need_keywords);


Результат
Array
(
[path] => sdu34hgd/dfgdi45.htm
)
Array
(
[0] => русское слово
[1] => еще одно
)

Ну и дальше пилить уже как нужно.

Спустя 17 минут, 1 секунда (15.02.2012 - 12:18) Painbot написал(а):
walerus, круто! а как данную красоту в цикле искать, чтобы он по всем строкам файла ходил? И брал только те которые с русским словами?

Спустя 26 минут, 37 секунд (15.02.2012 - 12:45) walerus написал(а):
$load_file = file( 'file_name' );

$result = array();
foreach( $load_file as $load_file_string )
{
$add = false; // Добавлять ли найденное в результат

// Распарсили строку

list( $need_url, , $need_keywords ) = explode( '|', $load_file_string );

$need_url = parse_url( $need_url ); // тут URL ссылка
$need_keywords = explode( ', ', $need_keywords ); // Возможные анкоры

// Если найден хоть один анкор

if ( count( $need_keywords ) )
{
foreach( $need_keywords as $need_keywords_value )
{
// Проверяем есть ли Русские буквы в словах
if ( preg_match( '~[а-яА-ЯёЁ]~iuUs', $need_keywords_value ) )
{
// Если есть, даем добро на добавление в результат
$add = true;
break;
}
else
$add = false;
}
}


if ( $add )
$result[] = array( 'URL' => $need_url, 'keywords' => $need_keywords);
}

print_r($result);

примерно так

Спустя 48 минут, 14 секунд (15.02.2012 - 13:33) Painbot написал(а):
Ход мыслей понял!! спасибо большое, вот только пока возвращает пустой массив, и на этом ОГРОМНОЕ спасибо!

Спустя 1 час, 11 минут, 26 секунд (15.02.2012 - 14:45) walerus написал(а):
Painbot - Я проверял, у меня нормально отрабатывает, посмотри что в $load_file - находится, получает он массив, или 1ну строку.

Спустя 16 минут, 28 секунд (15.02.2012 - 15:01) Painbot написал(а):
Array ( [0] => dsfgdfg.htm|Array|русские слова|||25.07.2011
[1] => dfghdfghhhh/-hdfgh.htm|Array||||25.07.2011
[2] => dfghdffgh/dfghdffghfghdfgh.htm|5577,5... и тп...

то есть массив :)

Спустя 3 часа, 16 минут, 36 секунд (15.02.2012 - 18:18) walerus написал(а):
Это
// Распарсили строку
list( $need_url, , $need_keywords ) = explode( '|', $load_file_string );


замени, на это


// Распарсили строку
$tmp = explode( '|', $load_file_string );
if ( !isset($tmp[0]) || !isset($tmp[2]) || trim( $tmp[0] ) == '' || trim( $tmp[2] ) == '') continue;

list( $need_url, , $need_keywords ) = $tmp;


Добавил проверку существования ключей и НЕ пустоты

Спустя 17 часов, 17 минут, 38 секунд (16.02.2012 - 11:35) Painbot написал(а):
Спасибо огромное!!! всё работает прекрасно!

но образовалась еще одна задача, которую я быстро не решу smile.gif,


$result[] - теперь в массиве необходимо отыскать повторяющиеся русские слова , посчитать их , только нужно считать не только элементы массива, но и то что разделяется запятыми, то есть "Первое русское слово, Второе русское слово, Третье русское слово" , подскажите пожалуйста?

Спустя 1 день, 9 часов, 48 минут, 22 секунды (17.02.2012 - 21:24) walerus написал(а):
Приведи наглядный пример, а то чет не доходит до меня, чего нужно сделать ))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.