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

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

1. Facecontrol - 07 Января, 2021 - 16:59:37 - перейти к сообщению
Здравствуйте! Помогите пожалуйста составить регулярку. Я раньше кое как составлял их но сейчас всё забыл, а восстанавливать знания к сожалению нет времени. В общем есть текстовый файл такого содержания.
Спойлер (Отобразить)



Мне нужно разделить файл так чтобы осталось всё что начинается на
CODE (htmlphp):
скопировать код в буфер обмена
  1. ***** 888poker Hand History for Game

и заканчивается на
CODE (htmlphp):
скопировать код в буфер обмена
  1. collected [ любое значение$ ]


То есть
Спойлер (Отобразить)

Значения могут быть разными, но нужно оставить всё что похоже на выражение выше, а остальное удалить
2. Строитель - 07 Января, 2021 - 21:44:55 - перейти к сообщению
Facecontrol, см. пример ~\*{5} 888poker Hand History for Game[dot]+?collected\h\[[^]]+\]~s
3. Facecontrol - 07 Января, 2021 - 22:52:57 - перейти к сообщению
Строитель пишет:


Ок а использовать её типо так?
PHP:
скопировать код в буфер обмена
  1. preg_match_all('~\*{5} 888poker Hand History for Game.+?collected\h\[[^]]+\]~gs', $r, $w);


Извини за глупый вопрос. Честно уже не помню как раньше это делал.
4. Строитель - 07 Января, 2021 - 23:10:29 - перейти к сообщению
Facecontrol пишет:
Ок а использовать её типо так?
Без модификатора g, в php роль этого модификатора лежит на preg_match_all()
Спойлер (Отобразить)


Ну и ещё может понадобится для поиска большего количества вариантов подправлять шаблон.
5. Facecontrol - 07 Января, 2021 - 23:41:44 - перейти к сообщению
Строитель пишет:
Facecontrol пишет:
Ок а использовать её типо так?
Без модификатора g, в php роль этого модификатора лежит на preg_match_all()
Спойлер (Отобразить)


Ну и ещё может понадобится для поиска большего количества вариантов подправлять шаблон.



Ок. Спасибо работает. А как теперь вывести в браузер все найденые вхождения. Вроде бы через print_r() или нет?
6. Строитель - 07 Января, 2021 - 23:42:55 - перейти к сообщению
Facecontrol пишет:
Вроде бы через print_r() или нет?
Да. Ну или как в примере выше var_dump($w);
7. Facecontrol - 07 Января, 2021 - 23:47:38 - перейти к сообщению
Строитель пишет:
Facecontrol пишет:
Вроде бы через print_r() или нет?
Да. Ну или как в примере выше var_dump($w);

Тогда оно будет выводить в таком стиле
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(1) { [0]=> array(134) { [0]=> string(1098) "***** 888poker Hand History for Game 646168446 ***** 800/1,600 Blinds No Limit Holdem - *** 29 12 2020 03:38:03 Tournament #172727773 Free - Table #494 9 Max (Real Money) Seat 9 is the

А нужно чтоб информация была в чистом виде. Например строка=> выборка
8. Строитель - 07 Января, 2021 - 23:51:01 - перейти к сообщению
Facecontrol пишет:
Например строка=> выборка
Ну и print_r() будет печатать в браузере некую "служебную" информацию вида array( ... ). Для чистого вывода в браузер используйте цикл foreach(){}.
9. Facecontrol - 08 Января, 2021 - 00:04:02 - перейти к сообщению
Строитель пишет:
Facecontrol пишет:
Например строка=> выборка
Ну и print_r() будет печатать в браузере некую "служебную" информацию вида array( ... ). Для чистого вывода в браузер используйте цикл foreach(){}.



Белый флаг
Ага попытался.

PHP:
скопировать код в буфер обмена
  1. $r = file_get_contents('1.txt');
  2. preg_match_all('~\*{5} 888poker Hand History for Game.+?collected\h\[[^]]+\]~s', $r, $w);
  3.  foreach ($w as $value) {
  4. echo "$value<br>";
  5. }


Выдало
Array

Не понял Радость
10. Строитель - 08 Января, 2021 - 00:08:28 - перейти к сообщению
Facecontrol, массив же двухуровневый, значит надо и циклов два:
Спойлер (Отобразить)
11. Facecontrol - 08 Января, 2021 - 00:16:27 - перейти к сообщению
Строитель пишет:
Facecontrol, массив же двухуровневый, значит надо и циклов два:
Спойлер (Отобразить)

Ок спасибо. А подскажи ещё такой вопрос. Что сделать чтоб грузило файлы большого размера. Помню когда то были проблемы, при загрузке больших файлов там какое то время ожидания вроде настраивается. Что то вроде этого.
12. Строитель - 08 Января, 2021 - 00:24:30 - перейти к сообщению
Facecontrol пишет:
при загрузке больших файлов там какое то время ожидания вроде настраивается. Что то вроде этого.
Цитата из доки:
По умолчанию максимальный размер загружаемого файла для скриптов PHP составляет 128 мегабайт. Однако вы можете изменить эти ограничения. Например, вы можете установить нижний предел, чтобы пользователи не могли загружать большие файлы на ваш сайт. Для этого измените директивы upload_max_filesize и post_max_size. Ну а время выполнения скрипта можно установить без ограничения: set_time_limit(0);
13. Facecontrol - 08 Января, 2021 - 00:33:36 - перейти к сообщению
Строитель пишет:
Facecontrol пишет:
при загрузке больших файлов там какое то время ожидания вроде настраивается. Что то вроде этого.
Цитата из доки:
По умолчанию максимальный размер загружаемого файла для скриптов PHP составляет 128 мегабайт. Однако вы можете изменить эти ограничения. Например, вы можете установить нижний предел, чтобы пользователи не могли загружать большие файлы на ваш сайт. Для этого измените директивы upload_max_filesize и post_max_size. Ну а время выполнения скрипта можно установить без ограничения: set_time_limit(0);


Спасибо огромное!!!
14. Facecontrol - 07 Ноября, 2021 - 16:04:30 - перейти к сообщению
Появился новый вопрос.
Есть регуярка
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match_all('~\*{5} 888poker Hand History for Game.+?collected\h\[[^]]+\]~s', $r, $w);


И есть файл с текстом например
Спойлер (Отобразить)

и текстом например
Спойлер (Отобразить)


Мне нужно чтоб регулярка как-то распознала где в тексте есть
CODE (htmlphp):
скопировать код в буфер обмена
  1. ***** 888poker Hand History for Game"любое значение" $2.70 + $0.30"любое значение" collected [любое значение ]

От текста где есть
CODE (htmlphp):
скопировать код в буфер обмена
  1. ***** 888poker Hand History for Game"любое значение" $0.90 + $0.10 "любое значение" collected [любое значение ]

И чтобы текст где есть ($2.70 + $0.30) писался в одну переменную, а текст где присутствует ($0.90 + $0.10) писался в другую переменную.
Как это составить регуляркой?
15. Facecontrol - 12 Ноября, 2021 - 19:39:34 - перейти к сообщению
Пробовал сделать так
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match_all('~\*{5} 888poker Hand History for Game.+?\$2\.70 \+ \$0\.30.+?collected\h\[[^]]+\]~s', $r, $w);

Не получилось оно находит всё равно и текст с $2.70 + $0.30 и текст с $0.90 + $0.10

 

Powered by ExBB FM 1.0 RC1