Форумы портала PHP.SU » PHP » Регулярные выражения » помогите с регуляркой

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

1. facece - 02 Февраля, 2018 - 13:57:36 - перейти к сообщению
Помогите пожалуйста есть такой код
<td>27 из 45 (60%)</td>

мне нужно вытянуть число между скобок. Как это сделать?
2. andrewkard - 02 Февраля, 2018 - 14:30:45 - перейти к сообщению
Можно так

/\(([0-9%]+)\)/
3. Строитель - 02 Февраля, 2018 - 15:17:29 - перейти к сообщению
facece пишет:
мне нужно вытянуть число между скобок. Как это сделать?
Спойлер (Отобразить)
4. facece - 02 Февраля, 2018 - 19:30:08 - перейти к сообщению
А ещё такой вопрос функция preg_match находит только первое совпадение. А мне нужно найти все совпадения. Записать их в массив и чтоб их можно было перебирать.
5. Строитель - 02 Февраля, 2018 - 19:40:29 - перейти к сообщению
facece пишет:
А ещё такой вопрос функция preg_match находит только первое совпадение. А мне нужно найти все совпадения. Записать их в массив и чтоб их можно было перебирать.
Глобальный поиск осуществляется с помощью preg_match_all().
(Добавление)
facece
Спойлер (Отобразить)
6. facece - 03 Февраля, 2018 - 00:28:24 - перейти к сообщению
оно то получилось только не совсем так. Теперь выводит так Array ([0] => 71 [1] => 75 [2] => 72)
7. Строитель - 03 Февраля, 2018 - 00:34:58 - перейти к сообщению
facece пишет:
оно то получилось только не совсем так. Теперь выводит так Array ([0] => 71 [1] => 75 [2] => 72)
А что вы подаёте на вход? Вообще, всегда указывайте исходную строку, и результирующую.

UPD: Кстати, чем вас не устроил результат? Вы ведь массив чисел получили, что и требовалось. Или нет?
8. facece - 03 Февраля, 2018 - 11:17:11 - перейти к сообщению
Оно то массив выдало но мне нужно так чтоб например в $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.  
9. Строитель - 03 Февраля, 2018 - 11:33:46 - перейти к сообщению
facece, ну так в чём проблема? Пишите так:
PHP:
скопировать код в буфер обмена
  1. echo $arr[0][0];// Надо чтоб выдало 71
  2. echo $arr[0][1];// Надо чтоб выдало 75
  3. echo $arr[0][5];// Надо чтоб выдало 60
10. facece - 03 Февраля, 2018 - 12:49:43 - перейти к сообщению
спасибо
11. facece - 04 Февраля, 2018 - 17:26:09 - перейти к сообщению
Ещё такой вопрос есть такой код <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> что не так?
12. Строитель - 04 Февраля, 2018 - 17:37:06 - перейти к сообщению
facece пишет:
Все ок выводит цифру 4
Ошибаетесь - первый вариант тоже выводит <td>4</td>. Что бы в этом убедиться, откройте в браузере исходный код вашей html-страницы.
(Добавление)
facece, попробуйте такой вариант:
Спойлер (Отобразить)
Если не подойдёт, подправлю на глобальный поиск, и допишу теги.

А если подойдёт, то для подобных задач и регулярки не нужны, т.к. можно просто вырезать теги из исходной строки с помощью strip_tags().
13. facece - 04 Февраля, 2018 - 19:27:42 - перейти к сообщению
Строитель пишет:
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> а от него вытягивать число что перед ним и число что после него. Вот только как?
14. Строитель - 04 Февраля, 2018 - 23:14:40 - перейти к сообщению
facece пишет:
Нужно искать например <td class="type">эйсы</td> а от него вытягивать число что перед ним и число что после него. Вот только как?
Спойлер (Отобразить)
15. facece - 05 Февраля, 2018 - 18:48:58 - перейти к сообщению
Выдало ошибку
Parse error: syntax error, unexpected '[' in Z:\home\test1.ru\www\tenis\1.php
на эту строку $arr = empty($arr[1]) ? [] : $arr[1] ;

 

Powered by ExBB FM 1.0 RC1