Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
JuniorJack
Witam, Potrzebuje z następującego kodu html

<img src="logo.gif"><br><code>Data: 08.06.2017, Godzina: 14:20:34<br><b></b>Stan licznika:<br>- aktualna godzina: <b>0</b>
<br>- od początku dnia: <b>18</b><br><br>W rozbiciu na godziny:
<br>&nbsp;0:00 - &nbsp;1:00:&nbsp;<b> 0</b>
<br>&nbsp;1:00 - &nbsp;2:00:&nbsp;<b> 0</b>
<br>&nbsp;2:00 - &nbsp;3:00:&nbsp;<b> 0</b>
<br>&nbsp;3:00 - &nbsp;4:00:&nbsp;<b> 0</b>
<br>&nbsp;4:00 - &nbsp;5:00:&nbsp;<b> 0</b>
<br>&nbsp;5:00 - &nbsp;6:00:&nbsp;<b> 0</b>
<br>&nbsp;6:00 - &nbsp;7:00:&nbsp;<b> 0</b>
<br>&nbsp;7:00 - &nbsp;8:00:&nbsp;<b> 0</b>
<br>&nbsp;8:00 - &nbsp;9:00:&nbsp;<b> 0</b>
<br>&nbsp;9:00 - 10:00:&nbsp;<b> 1</b>
<br>10:00 - 11:00:&nbsp;<b> 0</b>
<br>11:00 - 12:00:&nbsp;<b> 4</b>
<br>12:00 - 13:00:&nbsp;<b> 12</b>
<br>13:00 - 14:00:&nbsp;<b> 1</b>
<br>14:00 - 15:00:&nbsp;<b> 0</b>
<br>15:00 - 16:00:&nbsp;<b> 0</b>
<br>16:00 - 17:00:&nbsp;<b> 0</b>
<br>17:00 - 18:00:&nbsp;<b> 0</b>
<br>18:00 - 19:00:&nbsp;<b> 0</b>
<br>19:00 - 20:00:&nbsp;<b> 0</b>
<br>20:00 - 21:00:&nbsp;<b> 0</b>
<br>21:00 - 22:00:&nbsp;<b> 0</b>
<br>22:00 - 23:00:&nbsp;<b> 0</b>
<br>23:00 - 24:00:&nbsp;<b> 0</b>
<br><br>Status: 100000<br>Diagnostyka: 00
<br>s#: 02782, v1.13f(000001)<br>
Stos: 74<br><a href="./mem.cgi?I=1">dane archiwalne</a><br>
<a href="./email.cgi">wyślij raport e-mail</a><br><a href="./config.cgi">aktualna konfiguracja</a></code>


wyciągnąć dane i zapisać je w tablicy najlepiej w formacie
0:00 - 1:00 =>0
1:00 - 2:00 =>0
itd.

Próbuje to zrobić przy pomocy preg_match:
$tab = preg_match('@([0-9]+:[0-9]+)-&nbsp;([0-9]+:[0-9]+)@', $page);
ale nie znajduje mi żadnych wyrażeń.

Ktoś ma jakiś pomysł?
Pyton_000
https://regex101.com/r/hAzOrG/1
JuniorJack
Dzięki Pyton prawie działa ale tablica zwaraca 4 następujące pozyjcę:
0:00 -  1:00:  0
0:00
1:00
0

KOD:

$tab = preg_match('@(\d{1,2}:\d{2}) - (?:&nbsp;)?(\d{1,2}:\d{2}).*?(\d+)@m', $page, $matches);


$nTab = count($matches);

for ($i=0;$i<$nTab; $i++)
echo $matches[$i].'<br />';





Pyton_000
I jaki masz w tym problem? W 1-szym element zawsze zawiera pełne dopasowanie.
JuniorJack
bo chodzi o to żeby wyciągnąć wszystkie zakresy godzin + liczba wejść a wyciąga tylko pierwszy

0:00 - 1:00: 0
1:00 - 2:00: 0
2:00 - 3:00: 0
3:00 - 4:00: 0
4:00 - 5:00: 0
5:00 - 6:00: 0
6:00 - 7:00: 0
7:00 - 8:00: 0
8:00 - 9:00:1
9:00 - 10:00: 0
10:00 - 11:00: 4
11:00 - 12:00: 12
12:00 - 13:00: 1
13:00 - 14:00: 0
14:00 - 15:00: 0
15:00 - 16:00: 0
16:00 - 17:00: 0
17:00 - 18:00: 0
18:00 - 19:00: 0
19:00 - 20:00: 0
20:00 - 21:00: 0
21:00 - 22:00: 0
22:00 - 23:00: 0
23:00 - 24:00: 0


Pyton_000
sciana.gif facepalmxd.gif
Puszy
preg_match_all()

Gwoli ścisłości:

  1. <?php
  2.  
  3. $tab = preg_match_all('@(\d{1,2}:\d{2}) - (?:&nbsp;)?(\d{1,2}:\d{2}).*?(\d+)@m', $page, $matches);
  4.  
  5.  
  6. foreach ($matches[0] as $match){
  7. echo $match.'<br />';
  8. }
JuniorJack
Niestety:
Parse error: syntax error, unexpected 'foreach' (T_FOREACH) in C:\xampp\htdocs\liczniki\import.php on line 9

podpowiedzcie mi proszę czy w ogóle dobrze kombinuje próbując zapisać to w tablicy.
Potrzebuje te dane zapisać do bazy danych. Skrypt ma się wykonać raz dziennie i zapisać dane z każdego dnia z wejściami o poszczególnych godzinach?
Pyton_000
nie wstawiłeś ;
JuniorJack
preg_match_all('@(\d{1,2}:\d{2}) - (?:&nbsp;)?(\d{1,2}:\d{2}).*?(\d+)@', $page, $matches);
  
foreach ($matches[0] as $match)
{
echo $match.'<br />';
}


moim zdaniem jest wszędzie gdzie powinien być
Pyton_000
To może pokaż 15 linijek od początku...
JuniorJack
$page = file_get_contents("tomaszow.html");

preg_match_all('@(\d{1,2}:\d{2}) - (?:&nbsp;)?(\d{1,2}:\d{2}).*?(\d+)@', $page, $matches);
  
foreach ($matches[0] as $match)
{
echo $match.'<br />';
}


to jest cały kod

foreach ($matches[0] as $match)

a to jest 9 linia
Pyton_000
skoro tak twierdzisz to ten kod działa
JuniorJack
no niestety nie ;(
Puszy
Nie ma prawa nie działać, masz najzwyklejszy błąd składni, do tego konkretnie opisany co jest nie halo.
Pyton_000
Idę o zakład że brakuje `;` przed foreach i że nie pokazałeś całego kodu.
JuniorJack
<?php



$page = file_get_contents("tomaszow.html");

preg_match_all('@(\d{1,2}:\d{2}) - (?:&nbsp;)?(\d{1,2}:\d{2}).*?(\d+)@', $page, $matches);
  
foreach ($matches[0] as $match)
{
echo $match.'<br />';
}


?>

to jest cały kod, który zwraca błąd

Parse error: syntax error, unexpected 'foreach' (T_FOREACH) in C:\xampp\htdocs\liczniki\import.php on line 9

Miałbym pisać nieprawdziwy kod i oczekiwać pomocy...
Pyton_000
Jaka wersja PHP?
viking
To w takim razie w kodzie jest jakiś znak który wyświetla się jako biały a rzeczywiście nim nie jest.
JuniorJack
viking jesteś mistrz. wykasowałem puste linijki przed foreach i poszło. Dzięki wszystkim za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.