Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
1) повторюсь еще раз.. меня не интересует код, меня интересует какой текст на входе и что получаете на выходе. чтобы понять какие именно действия нужны и что получается не так, как вам хочется.
 
2) я же написал, что html игнорирует пробелы и так далее.
если есть обычный текст, то и выводите его в теге <pre></pre>
http://htmlbook.ru/html/pre

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 23:22 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
повторюсь еще раз.. меня не интересует код

Мое сообщение осталось на другой странице, вы видимо не заметили, я там подправил. Вставил скрин, где на одну и ту же страницу выводятся два блока. Один блок разбит на "абзацы", с помощью <br> а другой одной строкой.
Если html игнорирует пробелы и т.д., то в этом случае оба текста на одной странице, поэтому кажется что это из-за обработки, когда смена регистра происходит.
 
Добавлено:

Цитата:
повторюсь еще раз.. меня не интересует код

Мое сообщение осталось на другой странице и вы не увидели, я там подправил и вставил скрин, на котором два блока выводятся на одну страницу. Один блок с переносом строк, а тот, к которому применялась обработка со сменой регистра, в одну строку.
Получается html тут не при чем. Ведь второй блок html выводит с переносом строк.

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 05:41 21-04-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
вот так, на примерах, и нужно показывать ) вот

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
$sentences = preg_replace('/(^\s*\w)/ue', "mb_strtolower('$1', 'UTF-8')", $sentences);  
echo '<pre>' . implode('.', $sentences) . '.</pre>';

результат

Цитата:
ровный золотистый свет луны заливал высокий дом, стоящий на сваях, как на ходулях, освещал ребятишек и взрослых, сидящих на высоком помосте.  
в них, как и в сказках всех народов мира.  
сказка — удивительное творение человеческого гения.  
наутро я прощался с дедом Тхыонгом, и еще долго слышались.  
конечно, сказки слушали и слушают и в русских избах.  
но так было далеко не всегда, и Пушкин в 1824 году.  
разумеется, что сказки, оказавшись зафиксированными в книге.

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 06:50 21-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста.
Если предложение не заканчивается точкой, то дальнейшая обработка удаляет слово в начале строки.

 

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
$sentences = preg_replace('/(^\s*\w)/ue', "mb_strtolower('$1', 'UTF-8')", $sentences);
$sentences = preg_replace('/[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:16 21-04-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
помочь с чем? вы сами сказали так сделать

Цитата:
$sentences = preg_replace('/[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);

так как нет точки, то нет и конца-начала предложения в этом месте - удаляете слово с большой буквы, как вы определите что там делать?

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 22:23 21-04-2016 | Исправлено: Mavrikii, 22:24 21-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я сделал так:

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\.|(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\n/u', $string, 0, PREG_SPLIT_NO_EMPTY);

Получилось так:

 
Слово удалось спасти, но стали добавляться точки вначале предложения. Подскажете как от точек в начале избавиться?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:31 21-04-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Я сделал так:

смысл? будет предложение с переносом строки \n - посчитается как два разных предложения. для этого не нужны даже (?< и так далее.. вы пытаетесь методом тыка, не представляя логику работы в целом.
 

Цитата:
Подскажете как от точек в начале избавиться?


Цитата:
echo '<pre>' . implode('.', $sentences) . '.</pre>';

у вас в $sentences есть элементы просто с переносом строки - так как разбиение идет и по переносу строки и по точке. если есть оба - появляется элемент в массиве с символом переноса строки. фильтровать - перебирать и убирать/исправлять ненужное.
 
к примеру так

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\.|\r?\n/u', $string, 0, PREG_SPLIT_NO_EMPTY);
$sentences = preg_replace('/(^\s*\w)/ue', "mb_strtolower('$1', 'UTF-8')", $sentences);
echo '<pre>' . implode(".\n", $sentences) . '.</pre>';

 
но это все костыли

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 22:41 21-04-2016 | Исправлено: Mavrikii, 22:41 21-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но это все костыли

Спасибо и за костыли. )) Так Работает.
 
Добавлено:
Сейчас все работает. Но хочу спросить, можно ли регуляркой найти строчку, которая заканчивается словом без точки и не заменять ее, а после найденной строки поставить точку? Просто представлялось, что можно добавить в конце строк недостающие точки, если их там нет и этой проблемы бы не было. Или так не делается?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:51 21-04-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
если их там нет и этой проблемы бы не было. Или так не делается?

да все можно, но судя по показанными вами вариантов текстов - перенос строки не всегда является окончанием предложения.
 
например так
$string = preg_replace('/(?<!\.)(\s*?\r?\n|$)/U', ".$0", $string);

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 23:48 21-04-2016
cob



Кроткий лев
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю при чем тут web-программирование, но выдирать урлы из html-страниц для прог закачки помогают следующие примеры:
 
(http://.*?.(mp3|mpg|wav)) - найти все линки, заканчивающиеся на mp3 или..
 
(http://.*.avi) - найти все линки, заканчивающиеся на avi
 
(http://.*.filmiki/.*.avi) - найти все линки, заканчивающиеся на avi и содержащие в пути имя папки filmiki
 
(\">.*$) - найти (и убрать (заменой)) все символы, начиная с "> и до конца строки
 
 Наверное, можно проще или софтом, но я пока ничего другого не нашел..
Открываю файлы в AkelPad или NotePad++ и там можно в поиске и замене применять рег.выражения.
 
---

----------
Однажды Насреддин упал с осла. Ребятишки увидели это и стали покатываться от смеха. Насреддин поднялся и, отряхивая пыль, сказал детям: "Не смейтесь, я все равно должен был слезть."

Всего записей: 2920 | Зарегистр. 07-12-2001 | Отправлено: 13:52 25-05-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cob
это вопрос или что? более того, ваши регулярки без специального модификатора (кроме первой) могут повести себя плохо, так как "жадные".

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 16:25 25-05-2016
cob



Кроткий лев
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii Это пример обработки HTML с линками внутри. Проверено - работает. Предложите лучший вариант?
 
Добавить символы в начало строки (с помощью замены) - ^
Добавить символы в конец строки (с помощью замены) - $
 
---


----------
Однажды Насреддин упал с осла. Ребятишки увидели это и стали покатываться от смеха. Насреддин поднялся и, отряхивая пыль, сказал детям: "Не смейтесь, я все равно должен был слезть."

Всего записей: 2920 | Зарегистр. 07-12-2001 | Отправлено: 13:08 03-06-2016 | Исправлено: cob, 13:42 03-06-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cob

Цитата:
Проверено - работает. Предложите лучший вариант?  

даже если и работает, при чем тут данная тема?  
в php без модификатора жадности правильно работать не будет.
 
более того, вы не экранируете точки (например в .avi), а значит вместо точки может пойматься любой символ. в текстовых редактор бывают несколько упрощенные варианты регулярок. но, опять же, здесь спрашивают, а не просто публикуют.

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 20:01 03-06-2016
ivanmara



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день. Подскажите как составить рег выражение.
 
Есть строка  с названием телеканала и номером перед названием, например:
 
#EXTINF:-1,6 365 дней ТВ
 
Как убрать номер канала из строки что бы получилось:
 
#EXTINF:-1,365 дней ТВ
 
Заранее благодарен
 

Всего записей: 425 | Зарегистр. 23-06-2006 | Отправлено: 19:11 19-07-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ivanmara
$str = preg_replace('/(#EXTINF:-\d+,)\d+\s+(\d+)/', '$1$2', $str);

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 20:28 19-07-2016
avangard11



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вариант [^abc] - любой символ кроме abc.  
 

Всего записей: 1 | Зарегистр. 21-07-2016 | Отправлено: 16:08 21-07-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
avangard11
и к чему (зачем) это было написано?

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 19:50 21-07-2016
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересует, как задать в исключаемом перечне (в этом: [^символы]) совпадение не по одному, а разом по двум, трём символам (тег, например)? То есть, чтобы группа символов в диапазоне рассматривалась как единое целое, или как один символ?

Всего записей: 790 | Зарегистр. 05-04-2010 | Отправлено: 14:25 21-08-2016 | Исправлено: D1D1D1D, 14:25 21-08-2016
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
То есть, чтобы группа символов в диапазоне рассматривалась как единое целое, или как один символ?

примеры нужно показывать. в общем случае (но могу понимать не так, примеры) [^символы]{1,3} - от 1 до 3

Всего записей: 9219 | Зарегистр. 20-09-2014 | Отправлено: 21:28 22-08-2016
olegpronin



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста. нужна регулярка php, через php_match
Есть строка: Мой любимый принтер (canon) (цвет черный)
 
Нужно сделать так, чтобы в  
preg_match('????', "принтер (canon) (цвет (черный))", $match);
 
$match[1] = Мой любимый принтер (canon)
$match[2] = цвет (черный)
 
то есть искать последнюю закрывающуюся скобка, затем искать её открывающую скобку.
 
спасибо

Всего записей: 5363 | Зарегистр. 31-01-2007 | Отправлено: 13:34 12-10-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru