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
Форумы портала PHP.SU :: Версия для печати :: помогите с регуляркой [2]
Форумы портала PHP.SU » PHP » Регулярные выражения » помогите с регуляркой

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

16. Sail - 05 Февраля, 2018 - 19:42:35 - перейти к сообщению
facece пишет:
Выдало ошибку
Parse error: syntax error, unexpected '[' in Z:\home\test1.ru\www\tenis\1.php
на эту строку $arr = empty($arr[1]) ? [] : $arr[1] ;

Обновите версию php, либо ознакомьтесь: массивы.
17. Строитель - 05 Февраля, 2018 - 19:47:08 - перейти к сообщению
facece пишет:
Выдало ошибку
Parse error: syntax error, unexpected '[' in Z:\home\test1.ru\www\tenis\1.php
на эту строку $arr = empty($arr[1]) ? [] : $arr[1] ;
Потому что версия вашего PHP ниже версии 5.4.

Надо поднять версию PHP хотя бы до 5.4, ну или заменить сокращённые объявления массивов:
Спойлер (Отобразить)

(Добавление)
Sail опередил Закатив глазки
18. facece - 06 Февраля, 2018 - 08:55:27 - перейти к сообщению
Спасибо очень помог!!! А ещё такой вопрос есть код<h2>7-5 6-2 6-4</h2> как мне найти знак '-' и посчитать сколько нашло этих знаков?
19. Строитель - 06 Февраля, 2018 - 09:35:31 - перейти к сообщению
facece, написал "на коленке" Пример
20. facece - 08 Февраля, 2018 - 19:03:29 - перейти к сообщению
Чёт не работает. Подскажите ещё пожалуйста как мне разбить вот эту строку
<h2>6-3 6-7(3) 6-4</h2>
Мне нужно чтоб получилось например так
$arr[0][0]; //Выводило 6
$arr[0][1]; //Выводило 3
$arr[0][2]; //Выводило 6
$arr[0][3]; //Выводило 7 и то что в скобках и сами скобки нужно удалить
$arr[0][4]; //Выводило 6
$arr[0][5]; //Выводило 4
Как такое сделать?
Пробовал так
$str='<h2>6-3 6-7(3) 6-4</h2>';
preg_match_all('/<h2>(.*?)<\\/h2>/is' , $str, $arr);
print_r($arr[0]); //выводит 6-3 6-7(3) 6-4
(Добавление)
Впринципе можно было б и так
PHP:
скопировать код в буфер обмена
  1.  
  2. <? $str='<h2>6-3 6-7 6-4</h2>';
  3. preg_match_all('/<h2>(.*?)<\\/h2>/is' , $str, $arr);
  4. $str = print_r($arr[0]); // к примеру
  5. $re = '{
  6.  ^\s*(                  # начало строки
  7.    (\d+)                  # число
  8.      \s* [[:punct:]] \s*  # разделитель
  9.    (\d+)                  # число
  10.       \s*  # пробел
  11.    (\d+)                  # число
  12.         \s* [[:punct:]] \s*  # разделитель
  13.           (\d+)                  # число
  14.            \s*  # пробел
  15.    (\d+)                  # число
  16.         \s* [[:punct:]] \s*  # разделитель
  17.           (\d+)                  # число
  18.  )\s*$                  # конец строки
  19. }xs';
  20. // Разбиваем строку на куски при помощи preg_match().
  21. preg_match($re, $str, $pockets);
  22. // Теперь разбираемся с карманами.
  23.  
  24. echo " $pockets[2] ";
  25. echo " $pockets[3] ";
  26. echo " $pockets[4] ";
  27. echo " $pockets[5] ";
  28. echo " $pockets[6] ";
  29. echo " $pockets[7] "; ?>

Но портят всё скобки из-за них код не срабатывает. А без скобок всё ок.
21. Строитель - 08 Февраля, 2018 - 20:30:51 - перейти к сообщению
facece пишет:
Мне нужно чтоб получилось например так
$arr[0][0]; //Выводило 6
$arr[0][1]; //Выводило 3
$arr[0][2]; //Выводило 6
$arr[0][3]; //Выводило 7 и то что в скобках и сами скобки нужно удалить
$arr[0][4]; //Выводило 6
$arr[0][5]; //Выводило 4
Как такое сделать?
Если формат строки не меняется, т.е. он всегда такого вида: <h2>6-3 6-7(3) 6-4</h2>, то можно каждое число записать в круглые скобки, и тогда в результирующем массиве числа будут храниться по отдельности. При обходе полученного массива в цикле, первый элемент массива будет содержать полное вхождение подстроки, и т.к. вся подстрока не нужна, то первый элемент в цикле пропускается (для этого там прописано условие), а остальные элементы собираются в новый массив:
Спойлер (Отобразить)

Но если входная строка изменится, то вся эта конструкция не сработает, поэтому я бы предпочёл использование двух регулярок - в первой получать всё, что прописано между html тегами, а во второй уже получать группы чисел.

facece пишет:
Чёт не работает
Там есть кнопка "Execute code", и при нажатии на неё всё прекрасно отрабатывает Радость Скорее всего вы просто не корректно скопировали тот пример.
22. facece - 08 Февраля, 2018 - 20:52:30 - перейти к сообщению
Да входная строка может изменяться. Вот только я не понял как в первой получать всё, что прописано между html тегами, а во второй уже получать группы чисел.
Можно пример? Ато у меня с регулярками проблемма
23. Строитель - 08 Февраля, 2018 - 20:58:17 - перейти к сообщению
facece, с учётом того, что строка может изменяться, я бы сделал так:
Спойлер (Отобразить)
facece пишет:
Вот только я не понял как в первой получать всё, что прописано между html тегами
Ну вот в этом примере, после первого вызова preg_match() в нулевом индексе массива $arr будет храниться вся строка (вместе с тегами)

 

Powered by ExBB FM 1.0 RC1