Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
prog77
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 122
1

Поиск времени и диапазона времени в тексте

05.07.2017, 18:40. Просмотров 313. Ответов 3
Метки нет (Все метки)

Добрый день есть текст в нем встречается время или диапазон времени в таком виде

текст в 23 часа
текст в 22:00 - 00:00
текст с 21.00 до 03.00
текст в 17 часов
текст с 17:30 до 20:00
текст 18:30-19:30
текст в 13. 00
текст в 17.00
текст в 7.00
время может начинаться с буквы "в" (текст в 17.00 или текст в17.00)
может содержать между часами и минутами : (18:30, 18 :30, 18 : 30, 18: 30)- или больше пробелов,
точку (18.30, 18 .30, 18 . 30, 18. 30)- или больше пробелов, в этом случае нужно исключить время где минуты не должны быть в диапозоне от 01-12, исключаем дату 00 может быть,
или пустое пространство ( в 13 00, в 13 00).
могут быть диапазоны времени( в 11.00 - 00.00, в 22.00 - 00.00, в 22:00- 00:00, 22:00 -00:00, 22:00 00:00, 22:00 00:00 ) если диапозон начинается в значит изключение для дат не нужно но если диапазон начинается с "c"(с21.00 до 03.00, с 21:00 до 03:00, с 21:00 по 03:00 ) тогда нужно опять исключить время где минуты находятся в диапазоне 1-12.
Встречаются и такое время (23 часа, в 17 часов).
Ну и вообще время может быть без пробелов к тексту (текст22:00текст). В общем кто может помогите пожалуйсьа
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2017, 18:40
Ответы с готовыми решениями:

Как заблокировать поиск по времени в секундах
Подскажите как мне заблокировать всех этих наглых поисковиков пауков которые сканируют сайт каждые...

Поиск общего времени разговора на основе номера, времени и даты
Здравствуйте, Подскажите как можно подставить формулами время разговора"Итог" на основе ...

Расчет времени пуска,установившегося времени,времени торможения и паузу для лифта
t0=(3600/h)*(1-E) - пауза.ЕЕ можно взять произвольно(самим). А остальное надо высчитывать....

Алгоритм для сравнения диапазона времени.
Есть простая задачка, ноя никак не возму в толк, как к ней подступиться. Есть список организаций со...

Выборка диапазона строк по времени datetime
есть поле datetime, не могу сообразить как мне сделать выборку по времени,пропуская дату.Например...

3
plohoyav
298 / 311 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
08.07.2017, 00:59 2
С помощью регулярных выражений

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$t = 'текст в 23 часа
текст в 22:00 - 00:00
текст с 21.00 до 03.00
текст в 17 часов
текст с 17:30 до 20:00
текст 18:30-19:30
текст в 13. 00
текст в 17.00
текст в 7.00
время может начинаться с буквы "в" (текст в 17.00 или текст в17.00)
может содержать между часами и минутами : (18:30, 18 :30, 18 : 30, 18: 30)- или больше пробелов,
точку (18.30, 18 .30, 18 . 30, 18. 30)- или больше пробелов, в этом случае нужно исключить время где минуты не должны быть в диапозоне от 01-12, исключаем дату 00 может быть,
или пустое пространство ( в 13 00, в 13 00).
могут быть диапазоны времени( в 11.00 - 00.00, в 22.00 - 00.00, в 22:00- 00:00, 22:00 -00:00, 22:00 00:00, 22:00 00:00 ) если диапозон начинается в значит изключение для дат не нужно но если диапазон начинается с "c"(с21.00 до 03.00, с 21:00 до 03:00, с 21:00 по 03:00 ) тогда нужно опять исключить время где минуты находятся в диапазоне 1-12.
Встречаются и такое время (23 часа, в 17 часов).
Ну и вообще время может быть без пробелов к тексту (текст22:00текст)';
 
$t = ' '.preg_replace('/[\s]+/ism',' ',$t);
while (1) {
    if (preg_match('/[^\w]в[\s]{0,1}[\d]+/ism',$t,$m)) var_dump($m);
    break;
}
1
prog77
0 / 0 / 0
Регистрация: 23.10.2016
Сообщений: 122
08.07.2017, 18:57  [ТС] 3
plohoyav, сделал регулярку вот https://regex101.com/r/Mrh4YC/5 но в php выдает другой результат
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$t = 'текст в 23 часа
текст в 22:00 - 00:00
текст с 21.00 до 03.00
текст в 17 часов
текст с 17:30 до 20:00
текст 18:30-19:30
текст в 13. 00
текст в 17.00
текст в 7.00
время может начинаться с буквы "в" (текст в 17.00 или текст в17.00)
может содержать между часами и минутами : (18:30, 18 :30, 18 : 30, 18: 30)- или больше пробелов,
точку (18.30, 18 .30, 18 . 30, 18. 30)- или больше пробелов, в этом случае нужно исключить время где минуты не должны быть в диапозоне от 01-12, исключаем дату 00 может быть,
или пустое пространство ( в 13 00, в 13 00).
могут быть диапазоны времени( в 11.00 - 00.00, в 22.00 - 00.00, в 22:00- 00:00, 22:00 -00:00, 22:00 00:00, 22:00 00:00 ) если диапозон начинается в значит изключение для дат не нужно но если диапазон начинается с "c"(с21.00 до 03.00, с 21:00 до 03:00, с 21:00 по 03:00 ) тогда нужно опять исключить время где минуты находятся в диапазоне 1-12.
Встречаются и такое время (23 часа, в 17 часов).
Ну и вообще время может быть без пробелов к тексту (текст22:00текст)';
 //print__r($t);
 
print__r($t);
preg_match_all('~/[вс ]{0,3}([0-9]{1,2})[:. ]{1,3}([0-9]{1,2}|часа|часов)
(\sдо|до|по|\sпо|\s-|-)[\s]{0,1}([0-9]{1,2})[:. ]{1,3}([0-9]{1,2}|часа|часов)/ui',$t,$m);
print__r($m);
Добавлено через 7 часов 6 минут
Вот сделал может лучше можно сделать
PHP
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
$text = 'текст в 23 часа
текст в 22:00 - 00:00
текст с 21.00 до 03.00
текст в 17 часов
текст с 17:30 до 20:00
текст 18:30-19:30
текст в 13. 00
текст в 17.00
текст в 7.00
время может начинаться с буквы "в" (текст в 17.00 или текст в17.00)
может содержать между часами и минутами : (18:30, 18 :30, 18 : 30, 18: 30)- или больше пробелов,
точку (18.30, 18 .30, 18 . 30, 18. 30)- или больше пробелов, в этом случае нужно исключить время где минуты не должны быть в диапозоне от 01-12, исключаем дату 00 может быть,
или пустое пространство ( в 13 00, в 13 00).
могут быть диапазоны времени( в 11.00 - 00.00, в 22.00 - 00.00, в 22:00- 00:00, 22:00 -00:00, 22:00 00:00, 22:00 00:00 ) если диапозон начинается в значит изключение для дат не нужно но если диапазон начинается с "c"(с21.00 до 03.00, с 21:00 до 03:00, с 21:00 по 03:00 ) тогда нужно опять исключить время где минуты находятся в диапазоне 1-12.
Встречаются и такое время (23 часа, в 17 часов).
Ну и вообще время может быть без пробелов к тексту (текст22:00текст)';
 //print__r($t);
 
print__r($text);
 
preg_match_all('/[вс ]{0,3}([0-9]{1,2})[:. ]{1,3}([0-9]{1,2}|часа|часов)
(\sдо|до|по|\sпо|\s-|-)[\s]{0,1}([0-9]{1,2})[:. ]{1,3}([0-9]{1,2}|часа|часов)/x',$text,$arrayInterval);
 
print__r($arrayInterval);
if(count($arrayInterval)>0) {
    $text = str_replace($arrayInterval[0], "", $text);
}
print__r($text);
preg_match_all('/[вс ]{0,3}([0-9]{1,2})[:. ]{1,3}([0-9]{1,2}|часа|часов)/x',$text,$arrayTime);
print__r($arrayTime);
0
plohoyav
298 / 311 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
08.07.2017, 19:34 4
Можно в цикле для массива цифр от 0 до 9 находить позицию вхождения цифры в строку функцией strpos, выбирать минимальное значение, отступать от позиции два символа влево, считывать 10 символов, проверять, чтобы в выбранной субстроке не было лишних символов, например запятых, лишних слов - кроме "в", "час", "часа", "часов", таким образом находить временной промежуток, удалять его из текста, добавлять в массив, повторять поиск.
0
08.07.2017, 19:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2017, 19:34

Изменить формат времени диапазона ячеек
Как изменить формат диапозон ячеек времени из 2:20 рм на 14:20

Алгоритм распределения задач с учетом их важности, времени поступления и времени обработки
Задание составить алгоритм распределения задач с учетом их важности, времени поступления и времени...

Почему при записи даты и времени из формы в бд, к времени прибавляется час?
Здравствуйте, при записи даты и времени из формы в бд, к времени прибавляется час, почему так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru