[14:20:52] <zombah_> добрый день всем
[14:31:47] <zombah_> stuw: а ты php имел когданить дело?
[14:32:01] <stuw> zombah_: немного имел )
[14:33:03] <zombah_> stuw: во подскажи есть там вот такая функция http://php.net/manual/en/function.preg-split.php
[14:33:38] <zombah_> пытаюсь ей сделать разделитель строки не просто символ а кусок регекспа
[14:34:06] <zombah_> нашел даже пример в интернете, но он уж больно замороченный http://stackoverflow.com/questions/19078048/split-a-complex-string-with-a-preg-split#19078937
[14:34:53] <zombah_> хочу вот такую строку порезать в аррей "TP_BB_CN_street123-router123.city123_Interface1/11/0/6_MN_1!123#-XH- Dwdm id 002991"
[14:35:07] <stuw> а разделителем что должно быть?
[14:35:23] <zombah_> вот тут как раз и заморочка
[14:35:52] <zombah_> хочу разрезать вот так 0=TP_BB_CN 1=street123-router123.city123_Interface1/11/0/6_MN_1!...
[14:36:06] <zombah_> но чтот не выходит пока
[14:36:25] <zombah_> максимум что вышло вот так preg_split('/(.*?_)/', $input, -1, PREG_SPLIT_DELIM_CAPTURE);
[14:36:31] <zombah_> но тут ересь получается
[14:37:09] <zombah_> не пойму почему то что матчиться в () дропается целиком, а если в [] то тогда каждый знак применяется
[14:37:55] <zombah_> но если разделителем просто _ то он конечно на 6 частей режет
[14:38:27] <stuw> хм, а TP_BB_CN всегда одинаковое значение или меняется?
[14:38:45] <zombah_> вот я пытаюсь изобразить такой регексп чтоб TP_[A-Z]+_[A-Z]+_ заматчить но и сохранить его самого как
[14:39:23] <zombah_> TP_ постоянное, а дальше варианции типа BB_CN CC_CS EL_AC и тп
[14:39:35] <zombah_> всегда апперкес и буквы по два
[14:40:13] <zombah_> а вот дальше до _MN_X! может быть что угодно кроме \s
[14:40:14] <stuw> не можно подчеркиванием бахнуть, а потом первые три соединить
[14:41:15] <zombah_> да я думал так, но найдя этот пример что выше из stack думал можно комплексно разделить как надо
[14:41:19] <stuw> я бы на preg_match посмотрел в твоем случае
[14:41:38] <zombah_> а он массив делает на выходе?
[14:42:37] <zombah_> а вот это переписать пытаюсь под свои реалии https://github.com/librenms/librenms/blob/master/includes/port-descr-parser.inc.php
[14:42:52] <zombah_> а они тут массив разбирают на запчасти по порядку
[14:42:53] <stuw> ну да, там можно даже отдельные куски выкусить.
[14:43:10] <stuw> 5 сек
[14:43:54] <zombah_> у меня даже получилось в одном варианте сохранить TP_BB_CN_, но дальше ересь полная выходит
[14:44:06] <zombah_> preg_split('/^TP_[\[\A-Z\]+\_\[\A-Z\]+\_]/', $input, -1);
[14:44:39] <zombah_> если вот так делаю получается 0=TP_BB_CN_ а дальше куча пустых полей
[14:46:48] <stuw> preg_match("/(TP_[A-Z]{2}_[A-Z]{2})(.*MN_1!)(.*)/", "TP_BB_CN_street123-router123.city123_Interface1/11/0/6_MN_1!123#-XH- Dwdm id 002991", $matches);
[14:46:48] <stuw> print_r($matches)
[14:46:55] <stuw> так норм?
[14:47:07] <zombah_> счас попробую
[14:48:05] <stuw> 3 блока. Первый - TP_[A-Z]{2}_[A-Z]{2}, второй - все до MN_1!, третий - все остальное
[14:48:53] <zombah_> так он на выходе выдает просто 1
[14:49:25] <zombah_> аа переменную забыл
[14:49:50] <stuw> там правда нулевой элемент - исходная строк, но думаю это можно побороть
[14:50:14] <stuw> можно второй блок переделать на [^!]*! - все, до восклицательного знака
[14:50:19] <zombah_> да нулевой все целиком а дальше норм
[14:51:09] <stuw> print_r(array_slice($matches, 1))
[14:51:24] <zombah_> stuw: кайф спасибо!
[14:51:31] <stuw> пожалуйста :)
[14:56:29] <zombah_> $array = preg_split('/(TP_[A-Z]{2}_[A-Z]{2})(.*MN_1!)(.*)/', $input, -1, PREG_SPLIT_DELIM_CAPTURE); вот так тоже почти только 0 и 4 пустые 8)
[14:58:35] <stuw> preg_split?
[15:00:07] <stuw> PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
[15:00:20] <zombah_> ага я нашел его уже
[15:00:24] <stuw> а, он по сути сами делимитеры будет тоже выводить
[15:01:34] <zombah_> да тоже выходит норм