Реклама на сайте Advertise with us

Простая регулярка нужна

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 24/03/16 в 01:04       Ответить с цитатойцитата 

Нужно с помощью PHP вытянуть из строки
http://site.com/category/name
подстроку name.
Вроде и просто совсем но чета я в них не разбираюсь. Спасибо.

1
 



С нами с 27.03.04
Сообщения: 2494
Рейтинг: 585

Ссылка на сообщениеДобавлено: 24/03/16 в 02:02       Ответить с цитатойцитата 

([^http://(.)*/(.)*/])*$

пробуй

9
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 24/03/16 в 02:05       Ответить с цитатойцитата 

Код: [развернуть]

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

9
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 24/03/16 в 07:37       Ответить с цитатойцитата 

нафига регулярка?

array_pop(explode("/", $s))

11
 



С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760


Передовик Master-X (01.03.2005) Передовик Master-X (16.03.2005) Передовик Master-X (16.10.2016) Передовик Master-X (01.11.2016) Передовик Master-X (16.11.2016) Ветеран трепа Master-X (01.12.2016)
Ссылка на сообщениеДобавлено: 24/03/16 в 08:03       Ответить с цитатойцитата 


+1 когда можно обойтись без регулярки - лучше ее не использовать

9
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 24/03/16 в 10:48       Ответить с цитатойцитата 

есть такое

Код:

$x="http://site.com/category/name";
print(substr($x,(strrpos($x,"/")+1)));


хоть регулярка и простая - разница по таймингу гдето вдвое

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

9
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 24/03/16 в 10:51       Ответить с цитатойцитата 

rickdeckard писал:
нафига регулярка?

array_pop(explode("/", $s))


работает медленнее чем регулярка trollface.png
и гдето в три раза медленнее варианта с substr

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

9
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 25/03/16 в 02:55       Ответить с цитатойцитата 

Всем большое спасибо за помощь. Таки взял вариант без регулярки, больно он ловкий.

1
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 29/03/16 в 11:50       Ответить с цитатойцитата 

rx писал:
работает медленнее чем регулярка trollface.png
и гдето в три раза медленнее варианта с substr


и чо - может это разовый грабинг или вроде того - зачем преждевременные оптимизации? переписать на использование substr тогда
и вообще поставить php7 будет быстро работать

0
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 29/03/16 в 14:27       Ответить с цитатойцитата 

rickdeckard писал:
и чо - может это разовый грабинг или вроде того - зачем преждевременные оптимизации? переписать на использование substr тогда
и вообще поставить php7 будет быстро работать


"преждевременных" оптимизаций при выборе из одинаково трудоемкого не бывает,
относительные скорости от версии не зависят trollface.png

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

1
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 29/03/16 в 16:10       Ответить с цитатойцитата 

С некоторой вероятностью после name может быть page. Так что лучше с начала считать.

Код:
explode('/', $x)[4];


rickdeckard:
При вызове этой функции с не массивом будет вызвана ошибка уровня E_WARNING.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 30/03/16 в 13:11       Ответить с цитатойцитата 

такой варик не предлагали? trollface.png
Код:

$urlComopnents = parse_url($url, PHP_URL_PATH);
$categoryName = basename($urlComopnents, "/");

1
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 01/04/16 в 09:33       Ответить с цитатойцитата 

gimcnuk писал:
При вызове этой функции с не массивом будет вызвана ошибка уровня E_WARNING.

а зачем вы вызываете ее с не массивом? вызывайте с массивом тогда ошибки не будет.

Последний раз редактировалось: rickdeckard (01/04/16 в 09:37), всего редактировалось 1 раз

0
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 01/04/16 в 09:36       Ответить с цитатойцитата 

rx писал:
относительные скорости от версии не зависят



http://onlinephpfunctions.com/benchmarks
колонка String Manipulation

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 01/04/16 в 09:55       Ответить с цитатойцитата 

мне кажеца нада стремица к повышенной читабельности кода. Всякие эксплоды и субстринги этому не способствуют icon_cool.gif

0
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 01/04/16 в 17:23       Ответить с цитатойцитата 

rickdeckard писал:
http://onlinephpfunctions.com/benchmarks
колонка String Manipulation


https://ru.wikipedia.org/wiki/Относительность_(философия)

немножко помогу trollface.png

7.0.3

70000 Regexp done in 0.030171155929565 sec
70000 Substr done in 0.009404182434082 sec
70000 Arrayp done in 0.044059038162231 sec
70000 Parseu done in 0.065323829650879 sec

7.0.2

70000 Regexp done in 0.034229040145874 sec
70000 Substr done in 0.0086348056793213 sec
70000 Arrayp done in 0.048789024353027 sec
70000 Parseu done in 0.076931953430176 sec

7.0.1

70000 Regexp done in 0.032932996749878 sec
70000 Substr done in 0.0065271854400635 sec
70000 Arrayp done in 0.041872024536133 sec
70000 Parseu done in 0.06842303276062 sec

к слову бенчмарки что по ссылке ммм... не слишком точны ибо методика тестирования ммм... неверна, да и сам код не слишком корректен

оставив сам тестовый код, по методике - из за нестабильности окружения в зависимости от запуска результаты могут отличаться вдвое, а среднего арифметического из 100 запусков - в коде бенчмарков нет (как и в примерах выше) trollface.png

пруф -

########################################
Start : 04/01/2016 07:44:31 am
Server : @[...]
PHP version : 7.0.3
Platform : Linux
########################################
Math : 0.543 sec.
String Manipulation : 0.695 sec.
Loops : 0.154 sec.
If/Else : 0.227 sec.
########################################
Total: : 1.618 sec.

когда по ссылке -
PHP version Math String Manipulation Loops If / Else Total Time
7.0.3 1.25385 1.21416 0.15628 0.22951 2.85381 sec.

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 01/04/16 в 19:51       Ответить с цитатойцитата 

это называется экономия на спичках smail101.gif

В процессе разработки и поддержки кода ты подавляющее большинство времени читаешь, а не пишешь. Поэтому стоит в первую очередь оптимизировать этот момент, конечно, если это не 1разовая работа написанная на коленке кому-то за бесплатно. Во вторую очередь надо бы посмотреть архитектуру приложения, бд, связи в бд. Настройка окружения и все такое. И если все еще не хватает. То подумать над масштабированием (вертикальным или горизонтальным). А не писать хуйню с субстрингами мотивируя это тем, что оно "быстрее" на N микросекунд smail101.gif

Сие просто точка зрения, никому ниче не навязываю.

0
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 01/04/16 в 20:32       Ответить с цитатойцитата 

Жизнь — цепь, а мелочи в ней — звенья. Нельзя звену не придавать значенья. trollface.png

просто специфика разная. принцип паретто-спичек работает в меру способностей/опыта каждого индивидуально на самом деле. то есть там где кто-то видит сложности, не факт что они существуют в реальности для кого-то другого.

мои имхо -
* если в процессе разработки ты читаешь больше чем пишешь, то что-то идет не так.
* код который требует суровой поддержки и требует долгого чтения - изначально написан без QA, учета расширения, требуемых фич в проекте и удобной архитектуры.
* бд и хайлоад слабо совместимы. да и связи в бд как боттлнек - хм... при хайлоаде на бд таблицы денормализованы. обычно. ну это если не хочется возиться с масштабированием на N серверов и тратами на кластер.

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

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 01/04/16 в 21:56       Ответить с цитатойцитата 

ну сколько ты добьешься своей субстринговой оптимизацией в приросте производительности обычного парсера, или даже движка для сайта\фреймворка? тысячные доли секунды?
rx писал:
* если в процессе разработки ты читаешь больше чем пишешь, то что-то идет не так.
Ну тут я аплодирую стоя. Писать без ошибок, чтоб не дебажить потом перечитывая свое творение несколько раз подряд это талант. Я к сожалению им не наделен. Да и запоминать спустя месяцы что написано в куске кода тоже не могу, увы. Снова приходится перечитывать.

0
 



С нами с 22.05.04
Сообщения: 268
Рейтинг: 251

Ссылка на сообщениеДобавлено: 01/04/16 в 22:48       Ответить с цитатойцитата 

ну оптимизация же не только на сабстринг. она везде. и в вычислениях/операциях, и в архитектуре, и складываясь на выходе - получается много. очень много. особенно в движке для сайта/фреймворке. как в используемой памяти, так и скорости исполнения.

что касается парсеров - не всегда сабстринг актуален, +1, но чем сложнее регэкспы/правила разбора и больше размер данных - тем больше разница во времени между простыми ф-циями и регулярками. да и регулярка регулярке рознь. НО - разумеется есть такое что в парсерах, особенно простых - скорость упирается скорее в ширину канала чем в CPU, причем сильно. А вот если канал широкий или многопоточное все и собирается с N точек, то вжевывать данные уже надо оптимально быстро и с минимальными затратами, не плодя сервера.

тут не столько талант (хотя медали/олимпиады/дипломы/етц имеются) сколько опыт - при повторении/наблюдении одного и того же N раз при одинаковом процессе мышления код рано или поздно универсализируется и читается легко, особенно при высоком уровне реюзинга. набивается с шишками icon_smile.gif

Нестандартные задачи. Кастом программинг на ПХП. Оптимизация стороннего кода. Недорого, недешево.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 01/04/16 в 23:02       Ответить с цитатойцитата 

походу мне еще долго постигать дзен в программерстве smail101.gif

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 02/04/16 в 01:23       Ответить с цитатойцитата 

rickdeckard писал:
а зачем вы вызываете ее с не массивом? вызывайте с массивом тогда ошибки не будет.

Просто в твоём примере вызывается функция и пхп выдаёт предупреждение. И тормозит.

Можешь сам сравнить:

Код: [развернуть]

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4688
Рейтинг: 727

Ссылка на сообщениеДобавлено: 02/04/16 в 07:50       Ответить с цитатойцитата 

тоже самое. пхп 5.4 без опкеша. Прогнал каждую 10+ раз:
Код:

<?php
error_reporting(0);

$start = microtime(true);

$x = 'http://site.com/category/name';

for($i=0; $i<1000000; $i++)
{
   //preg_match("~^http://.*/(.*)$~smi", $x, $arr);$result = $arr[1];   // 1.324

   //$arr = explode("/", $x);$result = $arr[4];   // 0.872
   //$result = explode('/', $x)[4];   //0.782
   
   //$result = array_pop(explode("/", $x));   // 1.764
   //$arr = explode("/", $x);$result = array_pop($arr);   // 1.065

   //$result = substr($x,(strrpos($x, "/")+1));   // 0.467
   
   //$result = basename(parse_url($x, PHP_URL_PATH), '/');   // 1.253  - из 10 раз ниразу до 1.3
   //$path = parse_url($x, PHP_URL_PATH); $result = basename($path, '/'); // 1.312 - из 10 раз ниразу меньше 1.3
   
}

echo number_format(microtime(true)-$start, 3);

(нолик с цикла убрал, чета у вас сервера мощные черезчур smail101.gif )

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »