Здравствуйте! У меня есть часть строки вида Код (Text): <agent_phone>(4742) 11-11-11; 8-900-000-00-0</agent_phone> Мне нужно вычленить в массив номера телефонов, разделитель - точка с запятой У меня сейчас есть регулярка вида Код (Text): '/\<agent_phone\>(.*)\<\/agent_phone\>/' Подскажите, что вставить между тэгами?
Код (Text): ([\(\)\d\s;\-]+) Искать символы: (, ), числа, пробелы, точка с запятой, минус. Наверное. P.S. Или в коде ниже регулярки, делай PHP: <? if (strpos($match[1], ';')){ echo 'Имеется точка с запятой'; } где $match это preg_match(_all)?($regexp, $string, $match)
Не совсем то. Уточню: нужно найти все подстроки, находящиеся между разделителем. Разделителями могут являться: точка с запятой, запятая, два пробела, запятая с пробелом, точка с запятой с пробелом. разделителя может не быть вообще, если номер один.
PHP: <?php $string = '<agent_phone>ss (4742) 11-11-11; 8-900-000-00-0</agent_phone>'; preg_match("/\<agent_phone\>(.+)\<\/agent_phone\>/", $string, $matches); $phones = preg_split('/([;\.,]|\s{2,})/', $matches[1]); print_r($phones);
Тогда: Код (Text): '/\<agent_phone\>(.*)\<\/agent_phone\>/' и PHP: <? $array = array_map('trim', preg_split('/[;,]?[\s]{2,}/', $match[1]));
lexa я бы, вместо трим (не понимаю как он у тебя работает) воспользовался бы второй регуляркой, которая привела бы все номера телефонов к единому стандарту
topas Большое спасибо, сделал как ты сказал и обрезал затем пробелы. Теперь то, что надо)) А подскажешь, как потом удалить все символы, кроме цифр из номера? Это лучше сделать регуляркой или посимвольным перебором?
topas, trim() просто всему массиву делается. Ведь в условии "точка с запятой или запятая" не учитываются пробелы по бокам (кроме два и больше справа). andreybugakov, PHP: <? $numbers = preg_replace('/\D/', '', $match[1]);