Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > замена с регулярными выражениями preg_replace() |
Автор: Solid 3.11.2003, 19:57 | ||||||
Есть маленькая, и в то же время, на первый взгляд, не разрешимая проблемка. Всё дело в регулярном выражении, а именно c функцией preg_replace()... Так что зарание прошу тех, кто плохо разбирается в регулярках, ничего не говорить, или советовать. Есть данные, вида:
Например, запишем эти данные в переменную $string; Нужно обработать эту переменную при помощи регулярного выражения, что бы в последствие данные имели вид:
На это дело я сочинил следующий код:
и, к моему большому сожалению, в нём есть один баг. Видете в первой строчке me, да? и в конце стоит <текст>, так вот, реплэйс почему-то происходит до последней ">", а не до самой первой. В общем есть вопрос, как сделать так, что бы было правильно, как я описал? %) |
Автор: Secandr 3.11.2003, 21:35 |
А если поставить не .* а [^\<]* и всё получится ![]() P.S. Жадность алгоритма. P.P.S. Правда может \ ненужен |
Автор: Solid 3.11.2003, 23:28 |
Secandr: Большое спасибо. Здесь всё конечно правильно, но у меня возникла ещё одна подковырка. В ХТМЛ символ "<" обозначается как "<". Значит мне нужно вставить не [^\<], а "<", но если вставить [^\<\;] то получится, что мы будем проверять каждый символ, и если например между <> будет отдельный &, l, t или ;, то, само собой, регулярное выражение нефига не заменит. Вопрос: как сделать регулярное выражение целостным? Из вышеобъяснённого всё должно быть понятно, вроде. |
Автор: Secandr 4.11.2003, 08:08 |
попробуй [^(\<\;)] Правда я такого не делал. |
Автор: Solid 4.11.2003, 18:54 |
Пожалуйста удалите две предыдущущие записи. Secandr: хехе, у меня идентичное мышление с тобой. Я точно так же попробовал, но вот не сработало. Это абсолютно некакой разницы не имеет с тем, что я предлагал в предыдущем посте. Может быть всётаки есть какие-нибудь другие версии? Я даже не поленюсь их опробовать. |
Автор: Secandr 5.11.2003, 08:31 |
Есть бредовое предложение: поменять все "<" обратно на "<" ![]() А потом вернуть "<" ![]() Хотя это должно работать по другому. |
Автор: Solid 7.11.2003, 00:50 |
Secandr: насамом деле бредовое. Мне бы что попроще ;) |
Автор: Solid 7.11.2003, 00:50 |
OFFTOPIC: сделайте удаление собственных сообщений в форуме, а так же удалите 2 предыдущих (гостевых) сообщения. |
Автор: Secandr 7.11.2003, 15:55 |
Solid Идея, то бредовая, но иногда прокатывает. У меня почемуто .* иногда не работает, так приходится делать [^\r]* ![]() ![]() ![]() Есть тут люди знающие регулярные выражения ![]() |