Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: помогите с регуляркой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
facece
Отправлено: 02 Февраля, 2018 - 13:57:36
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




Помогите пожалуйста есть такой код
<td>27 из 45 (60%)</td>

мне нужно вытянуть число между скобок. Как это сделать?
 
 Top
andrewkard
Отправлено: 02 Февраля, 2018 - 14:30:45
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Можно так

/\(([0-9%]+)\)/
 
 Top
Строитель Модератор
Отправлено: 02 Февраля, 2018 - 15:17:29
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece пишет:
мне нужно вытянуть число между скобок. Как это сделать?
Спойлер (Отобразить)

(Отредактировано автором: 02 Февраля, 2018 - 15:18:43)

 
 Top
facece
Отправлено: 02 Февраля, 2018 - 19:30:08
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




А ещё такой вопрос функция preg_match находит только первое совпадение. А мне нужно найти все совпадения. Записать их в массив и чтоб их можно было перебирать.
 
 Top
Строитель Модератор
Отправлено: 02 Февраля, 2018 - 19:40:29
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece пишет:
А ещё такой вопрос функция preg_match находит только первое совпадение. А мне нужно найти все совпадения. Записать их в массив и чтоб их можно было перебирать.
Глобальный поиск осуществляется с помощью preg_match_all().
(Добавление)
facece
Спойлер (Отобразить)
 
 Top
facece
Отправлено: 03 Февраля, 2018 - 00:28:24
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




оно то получилось только не совсем так. Теперь выводит так Array ([0] => 71 [1] => 75 [2] => 72)
 
 Top
Строитель Модератор
Отправлено: 03 Февраля, 2018 - 00:34:58
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece пишет:
оно то получилось только не совсем так. Теперь выводит так Array ([0] => 71 [1] => 75 [2] => 72)
А что вы подаёте на вход? Вообще, всегда указывайте исходную строку, и результирующую.

UPD: Кстати, чем вас не устроил результат? Вы ведь массив чисел получили, что и требовалось. Или нет?

(Отредактировано автором: 03 Февраля, 2018 - 00:37:09)

 
 Top
facece
Отправлено: 03 Февраля, 2018 - 11:17:11
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




Оно то массив выдало но мне нужно так чтоб например в $1 записались число 71 в $2 число 75 в $3 число 72 без слов array и т.д
Не могу понять как это сделать
(Добавление)
делаю так
PHP:
скопировать код в буфер обмена
  1. <?$text = file_get_contents( 'http://www.gotennis.ru/players/compare_game/ATP/14705/33648/23142/0/' );
  2. preg_match_all('~(?<=\()\d+(?=%\))~', $text, $arr);
  3. var_dump($arr[0]);
  4.  

Выдало так
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(10) { [0]=> string(2) "71" [1]=> string(2) "75" [2]=> string(2) "72" [3]=> string(2) "60" [4]=> string(2) "53" [5]=> string(2) "60" [6]=> string(2) "38" [7]=> string(2) "31" [8]=> string(2) "38" [9]=> string(2) "33" }

А нужно чтоб было так например

PHP:
скопировать код в буфер обмена
  1. echo $arr[0];// Надо чтоб выдало 71
  2. echo $arr[1];// Надо чтоб выдало 75
  3. echo $arr[5];// Надо чтоб выдало 60
  4.  
 
 Top
Строитель Модератор
Отправлено: 03 Февраля, 2018 - 11:33:46
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece, ну так в чём проблема? Пишите так:
PHP:
скопировать код в буфер обмена
  1. echo $arr[0][0];// Надо чтоб выдало 71
  2. echo $arr[0][1];// Надо чтоб выдало 75
  3. echo $arr[0][5];// Надо чтоб выдало 60
 
 Top
facece
Отправлено: 03 Февраля, 2018 - 12:49:43
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




спасибо
 
 Top
facece
Отправлено: 04 Февраля, 2018 - 17:26:09
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




Ещё такой вопрос есть такой код <td>4</td> мне нужна только цифра.
Делаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. preg_match_all('/<td>[0-9]<\\/td>/', $text1, $err1);
  3. $e0=$err1[0][0];
  4. echo $e0;
  5.  

Все ок выводит цифру 4. А если делаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. <?preg_match_all('/<td>[0-9]<\\/td>/', $text1, $err1);
  3. $e0=$err1[0][0];?>
  4. <td><input name="1a" size="4" maxlength="32" value="<? echo $e0 ?>" type="text" /></td>
  5.  

Вводит полностью код <td>4</td> что не так?
 
 Top
Строитель Модератор
Отправлено: 04 Февраля, 2018 - 17:37:06
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece пишет:
Все ок выводит цифру 4
Ошибаетесь - первый вариант тоже выводит <td>4</td>. Что бы в этом убедиться, откройте в браузере исходный код вашей html-страницы.
(Добавление)
facece, попробуйте такой вариант:
Спойлер (Отобразить)
Если не подойдёт, подправлю на глобальный поиск, и допишу теги.

А если подойдёт, то для подобных задач и регулярки не нужны, т.к. можно просто вырезать теги из исходной строки с помощью strip_tags().
 
 Top
facece
Отправлено: 04 Февраля, 2018 - 19:27:42
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




Строитель пишет:
facece пишет:
Все ок выводит цифру 4
Ошибаетесь - первый вариант тоже выводит <td>4</td>. Что бы в этом убедиться, откройте в браузере исходный код вашей html-страницы.
(Добавление)
facece, попробуйте такой вариант:
Спойлер (Отобразить)
Если не подойдёт, подправлю на глобальный поиск, и допишу теги.

А если подойдёт, то для подобных задач и регулярки не нужны, т.к. можно просто вырезать теги из исходной строки с помощью strip_tags().

Да всё вышло. Всё правильно. Но я задумал не так. Я неправильно задумал весь код.
Вообщем я делаю парсер. И мне нужно выдрать некоторые значения. Но заметил я что на каждой странице структура исходника может немного поменяться, и поэтому уже парсер берёт не те значения. А так регулярка правильно работает...
(Добавление)
Вообщем вот кусок исходника
Спойлер (Отобразить)


На этой странице например есть такой код
<td>4</td>
<td class="type">эйсы</td>
<td>4</td>
</tr>
<tr>
<td>2</td>
<td class="type">двойные ошибки</td>
<td>1</td>
</tr>
А например здесь уже по другому
Спойлер (Отобразить)

Здесь к примеру нет
<td>4</td>
<td class="type">эйсы</td>
<td>4</td>
Я думал что оно везде одинаковая структура и поэтому перебирал так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('~<td>\d+~', $text1, $arr);
  2. $arr[0][0];$arr[0][1];

А теперь я понял что нужно искать но не понимаю как это воплотить в регулярке
Нужно искать например <td class="type">эйсы</td> а от него вытягивать число что перед ним и число что после него. Вот только как?
 
 Top
Строитель Модератор
Отправлено: 04 Февраля, 2018 - 23:14:40
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




facece пишет:
Нужно искать например <td class="type">эйсы</td> а от него вытягивать число что перед ним и число что после него. Вот только как?
Спойлер (Отобразить)
 
 Top
facece
Отправлено: 05 Февраля, 2018 - 18:48:58
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




Выдало ошибку
Parse error: syntax error, unexpected '[' in Z:\home\test1.ru\www\tenis\1.php
на эту строку $arr = empty($arr[1]) ? [] : $arr[1] ;
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB