X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите составить регулярку
happyhand
happyhand
Topic Starter сообщение 2.2.2011, 14:36; Ответить: happyhand
Сообщение #1


Нужно убрать абзац, в котором имеется тег input, всё остальное оставить.
Т.е. так:
[PHP]
<p><input...></p>//убрать
<p>text...</p>//оставить
[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 2.2.2011, 15:19; Ответить: Mulder_hb
Сообщение #2


[PHP]$str = "<p><input...></p><p>text...</p>";
$str = preg_replace('/<p>.*?<input[^>]*>.*?<\/p>/is', "", $str);[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
happyhand
happyhand
Topic Starter сообщение 2.2.2011, 16:17; Ответить: happyhand
Сообщение #3


А как теперь сделать наоборот, т.е., оставить input и выкинуть остальное?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
happyhand
happyhand
Topic Starter сообщение 2.2.2011, 16:27; Ответить: happyhand
Сообщение #4


Вобще-то, в идеале, нужно следующее: весь текст, который идёт после тега <input ...... /> обрезать до скольки-то символов функцией substr.
Хотя нет, текст может быть и до инпута. Короче весь текст, который не инпут, обрезать до, например, 200 символов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 3.2.2011, 20:33; Ответить: Apay
Сообщение #5


простой регуляркой это сделать сложно, придется добавлять модификатор e, то что было предложенно - неверно, проверяется все на простой строке:
[PHP]$str = "<p>text...</p><p><input...></p><p>text...</p><p><input...></p>";[/PHP]
вышепредложенный вариант просто вернет пустую строку.

для случая, когда нужно оставить с input это выглядит так (на скорую руку, может быть неоптимально):
[PHP]$str = preg_replace('#<p>(.*?)</p>#ise', 'strpos("\\1","<input")!==false?"\\0":""', $str );[/PHP]

если же нужно убрать все input, то:
[PHP]$str = preg_replace('#<p>(.*?)</p>#ise', 'strpos("\\1","<input")===false?"\\0":""', $str );[/PHP]

если надо сделать более сложную обработку (обрезку строки и пр.), лучше использовать preg_replace_callback и писать соотв. обработчик

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как составить уравнение, чтобы назначить цену для товара?
2 rownong27 762 21.3.2024, 12:53
автор: Lumex
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 732 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1702 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2347 7.8.2020, 9:28
автор: heisenberg_mw
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 12571 24.7.2020, 17:02
автор: -JamesSmips-


 



RSS Текстовая версия Сейчас: 25.4.2024, 20:12
Дизайн