Здравствуйте! Есть строка вида PHP: $string = "1.2.840.113549.1.9.1=некий текст1, 2.5.4.7=некий текст2, 2.5.4.10=некий текст3"; Как и нее получить, напрмер, значение 2.5.4.7? Сам пока допер только до того, что возвращается значение вида 2.5.4.7=некий текст2, а не некий текст2. Помогите пожалуйста, кто может.
Это OIDы - объектные идентификаторы. Номера OIDов заранее известны, а вот текст после знака равно изменяется. Собственно тест и нужно получить для дальнейшей работы с ним.
strpos() + substr() + strlen() Работай с ними, найди позицию OID'a в строке, прибавь к этой позиции длинну строки OID'a и ещё 1 (это знак "=") - получишь позицию, где начинаеться текст для OID'a. Далее тебе надо узнать позицию, где заканчиваеться текст для OID (если это запятая, то делаем strpos(',', $text, $position) где $position - это позиция начала текста для OID'a - для чего это нужно читай в мануале). Теперь ты знаешь позицию старта и конца, применяем substr(). алгоритм я тебе дал, тебе осталось написать код
PHP: <?php $string = "1.2.840.113549.1.9.1=некий текст1, 2.5.4.7=некий текст2, 2.5.4.10=некий текст3"; $oid = '2.5.4.7'; preg_match ("/$oid\s*=\s*(.+?)(?:,\s*\d+(?:\.\d+)+\s*=|$)/", $string, $matches); echo $matches[1]; ?>
stas_t Заколите меня колом, если я понимаю что-либо в данной регулярке... Смотришь на это и понимаешь - для того, что бы это понять, нужен мануал и N'ое кол-во времени. Лучше уж моим вариантом. З.Ы. Я сам люблю регулярки (и на работе всем с ними помогаю, потому что их больше никто не любит и не знает толком), но не всё подряд же терь в них пихать
без подстановки может слопать все следующие последовательности, что не есть хорошо: 2.5.4.7 22.5.4.7 2.2.5.4.7 подстановка должна гарантировать только первый вариант. хотя, сейчас вот посмотрел и снова решил переписать. похоже, подстановка должна быть следующая: (?:^|,\s*)