ФорумПрограммированиеPHP для идиотов → Регулярки

Регулярки

  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 9:59

    Здравствуйте! Помоготие пожалуйста с такой вещью:
    строка: "ывфыв ывф фыв 300x300x6.5mm фывфыв () фывф"

    надо выудить отсюда 300x300x6.5mm, делаю так, но ничего:
    preg_match("/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/", $description, $size);

    в чем ошибка?

    Спасибо!
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 18 июля 2009 г. 10:13, спустя 14 минут 7 секунд

    всё правильно
    <?php
    $description = "ывфыв ывф фыв 300x300x6.5mm фывфыв () фывф";
    $regexp = '/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/';
    preg_match($regexp, $description, $size);
    var_dump($size);


    Результат:
    array
    0 => string '300x300x6.5mm' (length=13)
    1 => string '300' (length=3)
    2 => string '300' (length=3)
    3 => string '6.5' (length=3)
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 18 июля 2009 г. 10:13, спустя 14 секунд

    preg_match("/[a-z0-9\.]+/i", $description, $size);
    попробуй
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 10:27, спустя 13 минут 41 секунду

    CTAPbIu_MABP, Timur, хм действительно работает, а почему тогда в такой строчке не находит?
    "CCSB04 Calculus 300x300x4mm Glass Mosaic Portland (11 шт. в коробке) H&R Johnson Мозаика"
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 18 июля 2009 г. 10:31, спустя 4 минуты 23 секунды

    <?php
    $description = "CCSB04 Calculus 300x300x4mm Glass Mosaic Portland (11 шт. в коробке) H&R Johnson Мозаика";
    $regexp = '/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/';
    preg_match($regexp, $description, $size);
    var_dump($size);


    Результат:
    array
    0 => string '300x300x4mm' (length=11)
    1 => string '300' (length=3)
    2 => string '300' (length=3)
    3 => string '4' (length=1)
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 10:35, спустя 3 минуты 49 секунд

    Timur, Вот очень странно, когда получаю эти данные и через регу пропускаю, то ничего не выводит, а если во так, тупо объявить переменную и проверить, то получается, в чем проблема может быть?
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 18 июля 2009 г. 10:44, спустя 9 минут 34 секунды

    $description = "CCSB04 Calculus 300x300x4mm Glass Mosaic Portland (11 шт. в коробке) H&R Johnson Мозаика";
    $regexp = '/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/is';
    preg_match($regexp, $description, $size);
    var_dump($size);
    попробуй
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 10:51, спустя 6 минут 45 секунд

    Troy, Увы опять ничего. Может загвоздка в том, что я тащу эти данные из эксель файла и регулярка просто не реагирует, ну там не знаю из-за кодировки или еще что (но отображаются же они нормально, только рега не работает)?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 18 июля 2009 г. 10:53, спустя 2 минуты 1 секунду

    vlasenkov, ты из excel скорее всего тянешь форматированый текст с тегами похожими на html
    попробуй экспортировать в csv и тянуть оттуда
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 10:56, спустя 3 минуты 16 секунд

    CTAPbIu_MABP, блин код не посмотрел. Тяну вот такую шляпу: "&#67&#67&#83&#66&#48&#52 &#67&#97&#108&#99&#117&#108&#117&#115 &#51&#48&#48&#120&#51&#48&#48&#120&#52&#109&#109"
    Как ее в нормальный текст преобразовать, чтобы рега работала? А в CSV не могу, не желательно это.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 18 июля 2009 г. 11:28, спустя 31 минуту 43 секунды

    может это смешно, но я сделал это нормальным текстом так:

    $string = urldecode("&#67&#67&#83&#66&#48&#52 &#67&#97&#108&#99&#117&#108&#117&#115 &#51&#48&#48&#120&#51&#48&#48&#120&#52&#109&#109");

    echo $string;
    //CCSB04 Calculus 300x300x4mm Glass Mosaic Portland (11 шт. в коробке) H&R Johnson
    Спустя 38 сек.
     думаю идею вы поняли, просто через функцию $text = urldecode($text) прогоните


    $description = urldecode($description);
    $regexp = '/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/is';
    preg_match($regexp, $description, $size);
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 11:32, спустя 4 минуты 17 секунд

    krasun, спасибо, но к сожалению если посмотреть код, то там все равно каракули, т.е. это не подходит. Эта функция по-мойму не для этого предназначена.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 18 июля 2009 г. 11:35, спустя 2 минуты 46 секунд

    в смысле каракули, где именно?

    на счет функции, главное писать не на языке, а с использованием языка
  • vlasenkov

    Сообщения: 34 Репутация: N Группа: Кто попало

    Spritz 18 июля 2009 г. 11:42, спустя 7 минут 10 секунд

    krasun, если в браузере открыть исходный код, то там остануться теже каракули.
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 19 июля 2009 г. 2:29, спустя 14 часов 46 минут 17 секунд

    какой еще urldecode?
    [man]html_entity_decode[/man] вроде для этого
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!