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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 54 55 56 57 58 59 60 61

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

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

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

Цитата:
Что если я хотел извлечь только имя до? До начала nm

это и делает подобное при использовании preg_match, можно сделать через preg_replace
 

Код:
$str = 'Jimmy il Fenomeno nm0271978.jpg';
preg_match('/(.*)nm\d+/', $str, $m);
var_dump($m);
var_dump(preg_replace('/(.*)nm\d+.*$/', '\1', $str));


Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 00:42 25-11-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
благодарю вас

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 06:43 25-11-2022
zagorisback



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


Цитата:
 
"The Bionic Woman" (1976) {Jaime's Shield: Part 2 (#2.11)}
"The Bionic Woman" (1976) {Jaime's Mother (#1.8)}
"The Bionic Woman" (1976) {Rancho Outcast (#3.21)}
 

 
Я должен извлечь числа только после #
 
пример:
 
2.11
1.8
3.21

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 09:15 30-11-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
/#([\d\.]+)/

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 09:34 30-11-2022
zagorisback



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

Цитата:
/#([\d\.]+)/

 
 
Возможно ли это без "группы"?
Я должен вставить его в «запрос» SQL для заказа номеров
 

Код:
CAST ( SUBSTRING ( movies.title FROM '#([\d\.]+)' ) AS DECIMAL ) AS numero
 

 
   
 
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 09:47 30-11-2022 | Исправлено: zagorisback, 09:50 30-11-2022
Mavrikii

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

Цитата:
PHP: Регулярные выражения

это не регулярные выражения в MySQL

Код:
SELECT REGEXP_REPLACE('"The Bionic Woman" (1976) {Rancho Outcast (#3.21)}', '^.*#([[[:alnum:]]\.]+).*$', '$1')

чтобы не выцепило если еще где в названии будет # и цифры
^.*#([[[:alnum:]]\.]+)\)}$

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 10:21 30-11-2022 | Исправлено: Mavrikii, 21:44 30-11-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
благодарю вас
 
Как мне это извлечь?
Название, с двойными вершинами
 

Цитата:
"Space: 1999" (1975)

 
Я хотел бы получить это
 
"Space: 1999"

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 16:32 01-12-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
еще раз - тут только о регулярка в php, а не в самой mysql
да аналогично же, убрать все после второй кавычки.
(^.*")[^"]*$, замена на $1

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 00:22 02-12-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
благодарю вас

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 21:58 05-12-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не понимаю, почему это регулярное выражение извлекает это имя
 
 

Цитата:
Gloria Guida on IMDb Movies, TV, Celebs, and more...

 

Код:
preg_match('|<meta property=\'og:title\' content="(.+?)(?:\s*-\s*IMDb)?"|s', $data, $title);
    
$title = preg_replace('/[\"\*\/\:\<\>\?\|]+/', '', html_entity_decode($title[1], ENT_QUOTES, "utf-8"));

 
Я просто хотел бы имя
 

Цитата:
Gloria Guida

 
https://www.imdb.com/name/nm0346708/

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 17:31 09-12-2022
Mavrikii

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

Цитата:
Я не понимаю, почему это регулярное выражение извлекает это им

потому что ваш скрипт, видимо, получает не ту версию страницы, что вы в браузере. посмотрите код, который получает ваш скрипт, и тогда поймете в чем разница.
 
да и кавычки там двойные, а не одинарные.
preg_match('|<meta property="og:title" content="(.+?)(?:\s*-\s*IMDb)?"|s', $data, $title);

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 22:17 09-12-2022 | Исправлено: Mavrikii, 22:25 09-12-2022
zagorisback



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

Цитата:
да и кавычки там двойные, а не одинарные.  

 
 
Я знаю, я исправил это раньше,
Но это возвращает мне ошибку с нулевыми значениями
 

Код:
var_dump($title);

 
 

Код:
<?php
 
preg_match('|<meta property=\'og:title\' content="(.+?)(?:\s*-\s*IMDb)?"|s', $data, $title);
    
$title = preg_replace('/[\"\*\/\:\<\>\?\|]+/', '', html_entity_decode($title[1], ENT_QUOTES, "utf-8"))
 
?>;

 

Цитата:
Error in data extraction! string(49) "Doris Day on IMDb Movies, TV, Celebs, and more..." Doris Day on IMDb Movies, TV, Celebs, and more... - nm0000013  

 
 
 

Код:
<?php
 
preg_match('|<meta property="og:title" content="(.+?)(?:\s*-\s*IMDb)?"|s', $data, $title);
 
?>  

 
 

Цитата:
Error in data extraction! string(0) "" - nm0000013

 
 
Вот откуда это происходит,
 

Цитата:
<meta property="og:title" content="Doris Day on IMDb: Movies, TV, Celebs, and more... - IMDb">

 
Это правильный адрес, а не то, что я публиковал раньше
 
https://www.imdb.com/name/nm0000013/mediaindex
 
Но ошибка всегда остается

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 00:41 10-12-2022 | Исправлено: zagorisback, 00:47 10-12-2022
Mavrikii

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

Цитата:
Error in data extraction!

я не знаю где и что у вас выдает такое сообщение - это не ошибка самого php
 

Цитата:
var_dump($title);

ну так в $title, наверно, не вся страница, а содержимое тега <title>?
вы сами не знаете, что и куда записываете?

Цитата:
<title>Doris Day on IMDb: Movies, TV, Celebs, and more... - Photo Gallery - IMDb</title>

от preg_match туда такое поместиться не может. значит где то и что то напутали с переменными.

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 00:49 10-12-2022 | Исправлено: Mavrikii, 00:56 10-12-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Первая часть кода
Я думаю, что первый "preg_match" неверна
 

 
 

Код:
$data = get($link);
    preg_match('|<div class="media_index_pagination leftright">\s+<div id="left" class="desc">(?:\d+-\d+ of )?(\d+) photos</div>|s', $data, $pagesnum);
    preg_match('|<meta property=\'og:title\' content="(.+?)(?:\s*-\s*IMDb)?"|s', $data, $title);
    $title = preg_replace('/[\"\*\/\:\<\>\?\|]+/', '', html_entity_decode($title[1], ENT_QUOTES, "utf-8"));
    if (empty($pagesnum) || empty($title) || empty($data)) {
        echo "\r\nError in data extraction!\r\n";

 
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 01:12 10-12-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
1) всегда нужно проверять, что регулярка сработала и только тогда работать с данными из нее
2)
Цитата:
\'og:title\'

и снова одиночные кавычки. если не сработает, то
Цитата:
$title[1]
выдаст ошибку.

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 01:14 10-12-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Код работает, как вы можете видеть на скриншоте, в таком случае
 
266 photos
 
Barbara Eden
 
https://www.imdb.com/name/nm0001174/mediaindex/
 
   
 
   
 
 
проблема и здесь, когда она превышает 1000 фотографий,
Из ошибки,
Я тестировал с другими актерами и работами, только более 1000 нет
 
 
Doris Day
 
https://www.imdb.com/name/nm0000013/mediaindex/
 
1.042 photos
 
 
Может быть, здесь и чтобы проверить, но, как мы заметили, это работает с другими
 
    
Код:
preg_match('|<div class="media_index_pagination leftright">\s+<div id="left" class="desc">(?:\d+-\d+ of )?(\d+)  

 
 
работает
 
Barbara Eden
 
https://www.imdb.com/name/nm0001174/mediaindex/
 

Код:
<div class="media_index_pagination leftright">
       <div id="left" class="desc">1-48 of 266 photos</div>
       <div id="right">    <span class="page_list">
            1
            <a href="/name/nm0001174/mediaindex?page=2&amp;ref_=nmmi_mi_sm">2</a>
            <a href="/name/nm0001174/mediaindex?page=3&amp;ref_=nmmi_mi_sm">3</a>
            <a href="/name/nm0001174/mediaindex?page=4&amp;ref_=nmmi_mi_sm">4</a>
            <a href="/name/nm0001174/mediaindex?page=5&amp;ref_=nmmi_mi_sm">5</a>
            <a href="/name/nm0001174/mediaindex?page=6&amp;ref_=nmmi_mi_sm">6</a>
    </span>
         <a href="/name/nm0001174/mediaindex?page=2&amp;ref_=nmmi_mi_sm" class="prevnext">Next&nbsp;»</a>
</div>
    </div>
 

 
 

Код:
это не работает

 
Doris Day
 
https://www.imdb.com/name/nm0000013/mediaindex/
 
 

Код:
<div class="media_index_pagination leftright">
       <div id="left" class="desc">1-48 of 1.042 photos</div>
       <div id="right">    <span class="page_list">
            1
            <a href="/name/nm0000013/mediaindex?page=2&amp;ref_=nmmi_mi_sm">2</a>
            <a href="/name/nm0000013/mediaindex?page=3&amp;ref_=nmmi_mi_sm">3</a>
            <a href="/name/nm0000013/mediaindex?page=4&amp;ref_=nmmi_mi_sm">4</a>
            <a href="/name/nm0000013/mediaindex?page=5&amp;ref_=nmmi_mi_sm">5</a>
            <a href="/name/nm0000013/mediaindex?page=6&amp;ref_=nmmi_mi_sm">6</a>
            <a href="/name/nm0000013/mediaindex?page=7&amp;ref_=nmmi_mi_sm">7</a>
            <a href="/name/nm0000013/mediaindex?page=8&amp;ref_=nmmi_mi_sm">8</a>
            <a href="/name/nm0000013/mediaindex?page=9&amp;ref_=nmmi_mi_sm">9</a>
            <a href="/name/nm0000013/mediaindex?page=10&amp;ref_=nmmi_mi_sm">10</a>
            <a href="/name/nm0000013/mediaindex?page=11&amp;ref_=nmmi_mi_sm">11</a>
            <a href="/name/nm0000013/mediaindex?page=12&amp;ref_=nmmi_mi_sm">12</a>
            <a href="/name/nm0000013/mediaindex?page=13&amp;ref_=nmmi_mi_sm">13</a>
            <a href="/name/nm0000013/mediaindex?page=14&amp;ref_=nmmi_mi_sm">14</a>
            <a href="/name/nm0000013/mediaindex?page=15&amp;ref_=nmmi_mi_sm">15</a>
            <a href="/name/nm0000013/mediaindex?page=16&amp;ref_=nmmi_mi_sm">16</a>
            <a href="/name/nm0000013/mediaindex?page=17&amp;ref_=nmmi_mi_sm">17</a>
            <a href="/name/nm0000013/mediaindex?page=18&amp;ref_=nmmi_mi_sm">18</a>
            <a href="/name/nm0000013/mediaindex?page=19&amp;ref_=nmmi_mi_sm">19</a>
            <a href="/name/nm0000013/mediaindex?page=20&amp;ref_=nmmi_mi_sm">20</a>
            <a href="/name/nm0000013/mediaindex?page=21&amp;ref_=nmmi_mi_sm">21</a>
            <a href="/name/nm0000013/mediaindex?page=22&amp;ref_=nmmi_mi_sm">22</a>
    </span>
         <a href="/name/nm0000013/mediaindex?page=2&amp;ref_=nmmi_mi_sm" class="prevnext">Next&nbsp;»</a>
</div>
    </div>

 
 
Я могу отправить вам полный код на личную электронную почту, если вы хотите ее проверить
Я не могу выпустить это, он был создан человеком, который сейчас мертв (я думаю)
Исходный код работает в командной строке "batch" (PHP)
Я адаптировал его, сняв «batch» и заставив его работать в браузере

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 08:32 10-12-2022 | Исправлено: zagorisback, 08:42 10-12-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
хватит постит кучу картинок, я их даже не смотрю.

Цитата:
Код работает, как вы можете видеть на скриншоте, в таком случае

поясняю - что то может пойти не так, изменится содержимое страницы, чего то не будет - и код перестанет вообще работать.
 

Цитата:
1.042 photos
Может быть, здесь и чтобы проверить, но, как мы заметили, это работает с другим

разницы быть не должно - переходим на 23 страницу
https://www.imdb.com/name/nm0000013/mediaindex?page=23
и там нет куска со страницами.
 

Цитата:
Я могу отправить вам полный код на личную электронную почту, если вы хотите ее проверить

не хочу.
 

Цитата:
preg_match('|<div class="media_index_pagination leftright">\s+<div id="left" class="desc">(?:\d+-\d+ of )?(\d+)

я не говорил "получить цифры". я сказал - перебирать страницы, увеличивая номер от 1 до момента, когда не будет кода с номерами страниц. да, один лишний запрос.
 
 

Цитата:
(?:\d+-\d+ of )

потому что точка, которая не относится к цифрам. а может быть и запятая - зависит от региональных настроек.
 
(?:[\d\.,]+-[\d\.,]+ of )?([\d\.,]+)  

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 08:49 10-12-2022 | Исправлено: Mavrikii, 08:49 10-12-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Контроль регулярного выражения
Это возвращает общее количество фотографий
 
Barbara Eden
 
https://www.imdb.com/name/nm0001174/mediaindex/
 
   
 
 
Контроль регулярного выражения
Нет результата
 
 
Doris Day
 
https://www.imdb.com/name/nm0000013/mediaindex/
 
   

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 09:20 10-12-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
у вас сложности со зрением?

Цитата:
(?:[\d\.,]+-[\d\.,]+ of )?([\d\.,]+)  


Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 09:21 10-12-2022
zagorisback



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

Цитата:
у вас сложности со зрением?
 
Цитата:
(?:[\d\.,]+-[\d\.,]+ of )?([\d\.,]+)  

 
Нет,
я только опубликовал результаты с исходным кодом
 
с вашими изменениями
 
   
 
И теперь это работает,
Так что первоначальное регулярное выражение было неправильно
 

Код:
 
preg_match('|<div class="media_index_pagination leftright">\s+<div id="left" class="desc">(?:[\d\.,]+-[\d\.,]+ of )?([\d\.,]+) photos</div>|s', $data, $pagesnum);
 

 
   
 
Спасибо Mavrikii за вашу драгоценную помощь

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 09:59 10-12-2022 | Исправлено: zagorisback, 10:00 10-12-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 54 55 56 57 58 59 60 61

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru