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

Регулярки

  • vlasenkov

    Сообщения: ? Репутация: 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 = &quot;ывфыв ывф фыв 300x300x6.5mm фывфыв () фывф&quot;;
    $regexp = &#39;/([0-9]{1,3})x([0-9]{1,3})x([0-9\.]{1,3})mm/&#39;;
    preg_match($regexp, $description, $size);
    var_dump($size);


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

    Сообщения: ? Репутация: 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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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