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

Вопрос по регуляркам

  • Alecs

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

    Spritz 19 мая 2008 г. 4:36

    Здраствуйте.
    Вопрос такой: как можно разбить строку "00000/11111/22222/33333/44444/55555"
    в массив {
    [0] => 00000
    [1] => 11111
    [2] => 22222
    [3] => 33333
    [4] => 44444
    [5] => 55555
    }
    split ("/", "00000/11111/22222/33333/44444/55555") работает, но split ("/", "00000") дает пустой массив.
    Попробовал написать регулярку но и она выдает {
    [0] => 00000
    [1] => 22222
    [2] => 44444
    } то есть вычисляет через раз.
    прошу подсказать работающую регулярку, если конечно она вообще возможна.
    PS. Вопрос имеет для меня чисто академический интерес, на будущее. Я обошел это затруднение через обработку исключений.
  • Trej Gun

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

    Spritz 19 мая 2008 г. 4:47, спустя 10 минут 57 секунд

    а что если вот так

    preg_split("~\/~", $str);
  • sap

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

    Spritz 19 мая 2008 г. 4:50, спустя 2 минуты 33 секунды


    а что если вот так

    preg_split("~\/~", $str);


    Нафига? http://php.net/manual/ru/function.explode.php
  • Trej Gun

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

    Spritz 19 мая 2008 г. 4:55, спустя 5 минут 31 секунду

    sap, не-не-не вопрос был про регулярку, я про регулярку ответил
  • sap

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

    Spritz 19 мая 2008 г. 5:18, спустя 22 минуты 49 секунд

    CTAPbIu_MABP, ну про регулярку да, но експлодом лучше =)
  • Alecs

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

    Spritz 19 мая 2008 г. 5:20, спустя 2 минуты 5 секунд


    а что если вот так

    preg_split("~\/~", $str);



    Спасибо, работает. Однако я ни разу не встречал значка ~ в мануалах. Не подскажете ссылку или литературу где про него можно прочитать?
  • Alecs

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

    Spritz 19 мая 2008 г. 5:25, спустя 5 минут 3 секунды


    CTAPbIu_MABP, ну про регулярку да, но експлодом лучше =)

    Експлод как и сплит, в случае, если не происходит разбитие строки [explode ("/", "00000") ] выдает пустой массив, что требует прописывание этого исключения в коде.
  • AlexB

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

    Spritz 19 мая 2008 г. 5:28, спустя 2 минуты 55 секунд


    Спасибо, работает. Однако я ни разу не встречал значка ~ в мануалах. Не подскажете ссылку или литературу где про него можно прочитать?
    В данном случае сам по себе значок ничего не означает, кроме того, что любая регулярка обязана начинаться и заканчиваться одним и тем же символом.
  • Trej Gun

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

    Spritz 19 мая 2008 г. 6:32, спустя 1 час 3 минуты 54 секунды

    Спасибо, работает. Однако я ни разу не встречал значка ~ в мануалах. Не подскажете ссылку или литературу где про него можно прочитать?


    В общем AlexB, говорит правду, сам значок ничего не означает кроме того что ограничивает регулярку, я бы мог написать вот так
    preg_split("/\//", $str);

    но было бы просто нечитаемо

    Я к сожалению не могу найти ссылку на мануал но по моему регулярные выражения могут ограничиваться парой любых (не уверен только спец символов или вообще любых включая русский, я не экспериментировал) символов причем если эти символы встречаться в строке они должны быть отслешены то есть

    Тильда

    ~\~~




  • sap

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

    Spritz 19 мая 2008 г. 8:59, спустя 2 часа 26 минут 57 секунд

    по моему регулярные выражения могут ограничиваться парой любых (не уверен только спец символов или вообще любых включая русский, я не экспериментировал)

    На счет русского не знаю, но вообще любых.
  • Trej Gun

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

    Spritz 19 мая 2008 г. 9:02, спустя 3 минуты 3 секунды

    но вообще любых


    любых конечно хорошо но представь что ты выбрал "i" и тебе надо модификатор "i", что должен делать компилятор?!
  • sap

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

    Spritz 19 мая 2008 г. 10:58, спустя 1 час 55 минут 31 секунду

    Интерпретатор сказал
    Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash

    Так что все же не любые символы могут быть ограничителем.

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