Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Значение после 2-го слэша
 
 автор: Лена Смирнова   (24.08.2009 в 23:28)   письмо автору
 
 

Из данного текста как вытащить число 64, там может быть любое другое число. В общем после второго слэша

/4678965350569212/64/1220435/

  Ответить  
 
 автор: heed   (24.08.2009 в 23:55)   письмо автору
 
   для: Лена Смирнова   (24.08.2009 в 23:28)
 

есть несколько способов
например такие
<?php
$txt 
'/4678965350569212/64/1220435/';

preg_match_all('#(?<!^|\G)/(\d+)#'$txt$o);  
print_r($o);
?><hr/><?
preg_match_all
('#^/\d+/(\d+)#'$txt$o);  
print_r($o);
?>
и могут оба не работать в зависимости от того что конкретно проверяется

  Ответить  
 
 автор: heed   (25.08.2009 в 00:00)   письмо автору
 
   для: heed   (24.08.2009 в 23:55)
 

забыл такой способ

print_r(sscanf($txt, '/%*d/%d'));

  Ответить  
 
 автор: Евгений Петров   (25.08.2009 в 01:06)   письмо автору
 
   для: Лена Смирнова   (24.08.2009 в 23:28)
 

<?php

$a 
explode("/""/4678965350569212/64/1220435/");
echo 
$a[2];

?>


В стопицоттыщ раз быстрее и нагляднее чем регулярные выражения.
Предвидя возгласы типа "да тут же целый массив создается!" отвечу сразу - во первых все равно в стопицоттыщ раз быстрее, а во вторых эти данные могут пригодится в дальнейшем по коду.

  Ответить  
 
 автор: Лена Смирнова   (25.08.2009 в 18:54)   письмо автору
 
   для: Евгений Петров   (25.08.2009 в 01:06)
 

Спасибо, я так и сделала!

  Ответить  
 
 автор: heed   (25.08.2009 в 20:20)   письмо автору
 
   для: Евгений Петров   (25.08.2009 в 01:06)
 

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

Если сравнить предидущий способ (со sscanf) с Вашим , при условии что проверяемые значения занимают много места в памяти , и нужна всего одна переменная ,,
Ваш способ проигрывает по времени
<pre><? 
$HDTME 
0.0;

 function 
g_t($bool=false){ //время
    
global $HDTME;
    list(
$m$s) = sscanf(microtime(), '%f %u');
    if(
$bool) {
     
printf("<hr/>%.7f\n\n", (($m $s) - $HDTME));
     
flush();
    } 
$HDTME $m $s;
}

g_t();#        засечено


$txt = array('/4678965350569212/64/1220435/',
    
'/4678965350569212/65/1220435/',
    
'/4678965350569212/66/1220435/',
    
'/4678965350569212/67/1220435/');

$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
$txt array_merge($txt$txt$txt$txt$txt$txt$txt);
//  print_r($txt); exit;
// здесь прилично времнеи уходит на заполнение памяти массивом
?><hr/><?
g_t
(1);#        засечено


foreach($txt AS $val) {
    list(
$int) = sscanf($val'/%*d/%d');    
}
g_t(1);#        засечено
foreach($txt AS $val) {
    list(,,
$int) = explode('/'$val);    
}
g_t(1);#        засечено
foreach($txt AS $val) {
    list(
$int) = sscanf($val'/%*d/%d');    
}
g_t(1);#        засечено
foreach($txt AS $val) {
    list(,,
$int) = explode('/'$val);
}
g_t(1);#        засечено
foreach($txt AS $val) {
    list(
$int) = sscanf($val'/%*d/%d');    
}
g_t(1);#        засечено
foreach($txt AS $val) {
    list(,,
$int) = explode('/'$val);
    
}
g_t(1);#        засечено
?>

  Ответить  
 
 автор: Евгений Петров   (25.08.2009 в 23:33)   письмо автору
 
   для: heed   (25.08.2009 в 20:20)
 

Бррр, ... Не знаю чего вы там напроверяли, но то что explode занимает меньше памяти чем регулярное выражение - это факт. на счет sscanf спорить не буду хотя тоже есть очень большие сомнения.
Но допустим sscanf быстрее. Скажите мне, что лучше - выигрыш в скорости в тысячные доли секунды либо читаемость кода?

  Ответить  
 
 автор: heed   (25.08.2009 в 23:59)   письмо автору
 
   для: Евгений Петров   (25.08.2009 в 23:33)
 

Возможно Вы правы.
Просто наверное я привык сидеть и разбираться в одной строчке закорючек
,) зато реже страницы прокручивать приходится.
Насчёт регулярных выражений, Ваша правда.
В php это просто иногда применяется когда уже ничего больше не помогает вытащить чего-нибудь со строки ,) и уже не до времени выполнения. Или когда их применение оправдано.
В Perl они намного красивее и шустрее

  Ответить  
 
 автор: Trianon   (26.08.2009 в 00:39)   письмо автору
 
   для: Евгений Петров   (25.08.2009 в 23:33)
 

>Но допустим sscanf быстрее. Скажите мне, что лучше - выигрыш в скорости в тысячные доли секунды либо читаемость кода?

Важнее читаемость кода. И именно поэтому (а не вопреки) имеет смысл выбрать sscanf.
Хотя разница в читаемости и не сильно высока.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования