За последние 24 часа нас посетили 56811 программистов и 7339 роботов. Сейчас ищут 1970 программистов ...

Регулярка. Найти в строке слово, и слово перед ним.

Тема в разделе "PHP для новичков", создана пользователем djtwister, 21 дек 2015.

  1. djtwister

    djtwister Активный пользователь

    С нами с:
    9 авг 2012
    Сообщения:
    26
    Симпатии:
    1
    Т.к. в рег.выражениях практически ноль, да и гугль с яшей, более менее понятного ответа дать не смог, прошу Вас ув.Гуру пыха помочь...

    есть строки типа "зеленая бумага 500 стр., 2 х-сторонняя", "Синяя бумага 550 стр", "Вяленая бумага 200 стр. ; Двойная", эти строки получаю в цикл из БД.

    записей много, но у всех есть ключ "стр", и нужно взять и как-то дёрнуть цифру перед ключом - "500","550","200", при этом всякие другие, ненужные цифры могут быть до или после искомого...

    далее я уж это число подставляю в другую строку и т.д. ...
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.225
    Адрес:
    там-сям
    Покажи свои попытки.
     
  3. djtwister

    djtwister Активный пользователь

    С нами с:
    9 авг 2012
    Сообщения:
    26
    Симпатии:
    1
    а попыток то почти и нет. ибо даже не знаю куда рыпаться...
    пробовал конструкции, с указанием начала строки, пробовал с конца строки по ^стр, но... их уже нет ибо они не работали, и я их перетер другими попытками.
    последнее чем марочусь это explode.
    т.к. 85% строк можно в ручную подставить, искомое находится под номером 2 в массиве. а остальные 15% могут быть где угодно.

    Код (PHP):
    1. $text = "зеленая бумага 500 стр., 2 х-сторонняя";
    2. $text = preg_replace('/ {2,}/',' ',$text);
    3. $text = explode(' ', trim($text)); 
    но не знаю как узнать номер в массиве, например это будет $text[3], и как при этом вытащить предыдущий элемент массива $text[3-1]

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ну ты примерно-то накидай. а то подумаем что халявщик и в другой раздел задвинем тему
     
  5. djtwister

    djtwister Активный пользователь

    С нами с:
    9 авг 2012
    Сообщения:
    26
    Симпатии:
    1
    я и не скрываю что халявщик. только писать за меня не надо. сам хочу понять
    далал
    substr($text, strpos($text, 'стр')+strlen('стр'));
    нито, пробовал так
    $text = substr($text, 0, strpos($text, 'стр'));
    получаю зеленая бумага 500
    но после, незнаю как оставить именно ЦЫФРЫ последние...
    при этом, они ещё и могут быть такими 5 000, ну тут хрен с ним, как нить придумаю срезать 1 пробел
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    Код (PHP):
    1. $text = "зеленая бумага 500 стр";
    2. $arr = explode(" ", $text);
    3. echo $arr[count($arr)-1];//тут будет нужное значение.
    4.  
    Добавлено спустя 1 минуту 23 секунды:
    если могут быть такими, вариант выше не катит
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
  8. djtwister

    djtwister Активный пользователь

    С нами с:
    9 авг 2012
    Сообщения:
    26
    Симпатии:
    1
    получил что хотел так:
    Код (PHP):
    1. $text = "зеленая бумага 500 стр., 2 х-сторонняя";
    2. $text = preg_replace('/ {2,}/',' ',$text );
    3. $text = substr($text, 0, strpos($text, 'стр'));
    4. $text = str_replace('стр', '', $text);
    5. $text = explode(' ', $text);
    6. echo $text[count($text)-2]; 
    для разового использования сойдёт, но уверен - можно по другому =)))

    Спасибо всем, кто уделил внимание. Учиться учиться и снова учиться.

    Огромный "Спасибо"
    Спасибо за идею на будущее.
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Кто ж вам мешает сделать будущее настоящим? ;)
    Код (PHP):
    1. <?php
    2. $arr = [
    3.     'зеленая бумага 5000 стр., 2 х-сторонняя',
    4.     'зеленая бумага 7 000 стр., 2 х-сторонняя',
    5.     'зеленая бумага 1 000 000 стр., 2 х-сторонняя'
    6. ];
    7. foreach($arr as $v) {
    8.     preg_match('/(?<!\d)\s([\d\s]+)(?=\sстр\.)/', $v, $m);
    9.     echo $m[1] , PHP_EOL;
    10. }
     
  10. djtwister

    djtwister Активный пользователь

    С нами с:
    9 авг 2012
    Сообщения:
    26
    Симпатии:
    1
    Вопросов нет, всегда нужно делать будущее =)
    но, к нему - нужно идти твердо учась. а на это нужно время и понимание. а его увы как всегда нет, и из за этого начинается изобретение велосипедов...
    скажем так, что с помощью preg_match('/(?<!\d)\s([\d\s]+)(?=\sстр\.)/', $sql['name'], $m); - стало НАМНОГО проще и одной строчечкой =)
    щас буду изучать и понимать что там за код...)
    однако пришлось добавить strip_tags, ибо кто-то вхреначил теги в имя... зачем непонятно.

    Вам, Мега 10'X!