Т.к. в рег.выражениях практически ноль, да и гугль с яшей, более менее понятного ответа дать не смог, прошу Вас ув.Гуру пыха помочь... есть строки типа "зеленая бумага 500 стр., 2 х-сторонняя", "Синяя бумага 550 стр", "Вяленая бумага 200 стр. ; Двойная", эти строки получаю в цикл из БД. записей много, но у всех есть ключ "стр", и нужно взять и как-то дёрнуть цифру перед ключом - "500","550","200", при этом всякие другие, ненужные цифры могут быть до или после искомого... далее я уж это число подставляю в другую строку и т.д. ...
а попыток то почти и нет. ибо даже не знаю куда рыпаться... пробовал конструкции, с указанием начала строки, пробовал с конца строки по ^стр, но... их уже нет ибо они не работали, и я их перетер другими попытками. последнее чем марочусь это explode. т.к. 85% строк можно в ручную подставить, искомое находится под номером 2 в массиве. а остальные 15% могут быть где угодно. Код (PHP): $text = "зеленая бумага 500 стр., 2 х-сторонняя"; $text = preg_replace('/ {2,}/',' ',$text); $text = explode(' ', trim($text)); но не знаю как узнать номер в массиве, например это будет $text[3], и как при этом вытащить предыдущий элемент массива $text[3-1] Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
я и не скрываю что халявщик. только писать за меня не надо. сам хочу понять далал substr($text, strpos($text, 'стр')+strlen('стр')); нито, пробовал так $text = substr($text, 0, strpos($text, 'стр')); получаю зеленая бумага 500 но после, незнаю как оставить именно ЦЫФРЫ последние... при этом, они ещё и могут быть такими 5 000, ну тут хрен с ним, как нить придумаю срезать 1 пробел
Код (PHP): $text = "зеленая бумага 500 стр"; $arr = explode(" ", $text); echo $arr[count($arr)-1];//тут будет нужное значение. Добавлено спустя 1 минуту 23 секунды: если могут быть такими, вариант выше не катит
получил что хотел так: Код (PHP): $text = "зеленая бумага 500 стр., 2 х-сторонняя"; $text = preg_replace('/ {2,}/',' ',$text ); $text = substr($text, 0, strpos($text, 'стр')); $text = str_replace('стр', '', $text); $text = explode(' ', $text); echo $text[count($text)-2]; для разового использования сойдёт, но уверен - можно по другому =))) Спасибо всем, кто уделил внимание. Учиться учиться и снова учиться. Огромный "Спасибо" Спасибо за идею на будущее.
Кто ж вам мешает сделать будущее настоящим? Код (PHP): <?php $arr = [ 'зеленая бумага 5000 стр., 2 х-сторонняя', 'зеленая бумага 7 000 стр., 2 х-сторонняя', 'зеленая бумага 1 000 000 стр., 2 х-сторонняя' ]; foreach($arr as $v) { preg_match('/(?<!\d)\s([\d\s]+)(?=\sстр\.)/', $v, $m); echo $m[1] , PHP_EOL; }
Вопросов нет, всегда нужно делать будущее =) но, к нему - нужно идти твердо учась. а на это нужно время и понимание. а его увы как всегда нет, и из за этого начинается изобретение велосипедов... скажем так, что с помощью preg_match('/(?<!\d)\s([\d\s]+)(?=\sстр\.)/', $sql['name'], $m); - стало НАМНОГО проще и одной строчечкой =) щас буду изучать и понимать что там за код...) однако пришлось добавить strip_tags, ибо кто-то вхреначил теги в имя... зачем непонятно. Вам, Мега 10'X!