Помогите с регуляркой

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Помогите с регуляркой

Сообщение kawabanga »

Надо отделить превью от основной статьи, следующего вида:

"Это текст, отображающийся в предпросмотре статьи <preview> А этот текст должен вырезаться"

Я должен получить два значения:
a) "Это текст, отображающийся в предпросмотре статьи"
b) "Это текст, отображающийся в предпросмотре статьи А этот текст должен вырезаться"


какие паттерны в preg_replace соответствуют заданным значениям?
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: Помогите с регуляркой

Сообщение Loki »

Если нужны именно регулярки – то примерно так:
http://regex101.com/r/rV1dL6
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Помогите с регуляркой

Сообщение kawabanga »

Во, замечательно, спасибо!)
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Помогите с регуляркой

Сообщение kawabanga »

Не все замечательно....(
http://regex101.com/r/xN3uP7 а если использовать такую строку?
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: Помогите с регуляркой

Сообщение Loki »

http://regex101.com/r/iJ3eB1
Такой вариант.
Вообще, возможно стоит посмотреть в сторону использования strpos + substr.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Помогите с регуляркой

Сообщение samdark »

Код: Выделить всё

class Text {
    /**
     * Cuts text after <preview> mark
     *
     * @param string $text
     * @param string $more_link
     * @return string
     */
    static function cut($text, $more_link) {
        $text = explode('<preview>', $text, 2);
        return empty($text[1]) ? $text[0] : $text[0]."\n$more_link";
    }

    /**
     * Removes <preview> mark from the text
     *
     * @param string $text
     * @return string
     */
    static function hideCut($text) {
        return str_replace('<preview>', '', $text);
    }
 
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Помогите с регуляркой

Сообщение kawabanga »

Sam Dark, спасибо!

А подскажите пожалуйста еще, я так понимаю в rules необходимо поставить проверку текста по паттерну? какой паттерн должен подойти под многострочный текст вида , "Много текста <preview> продолжение статьи"

Код: Выделить всё

array('content', 'match', 'pattern'=>'паттерн',
                'message'=>'Вы должны указать метку <preview> для Превью страницы'),
UPD: справился вот так:

Код: Выделить всё

array('content', 'match', 'pattern'=>'<preview>',
                'message'=>'Вы должны указать метку <preview> для Превью страницы'),
Ответить