REGEXP Hilfe


EuroCent

Erfahrenes Mitglied
#1
Guten morgen zusammen,

ich hänge an einem Problem fest.
Ich lasse mir entsprechende Logs erstellen die wie folgt aufgebaut ist:
Code:
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
[00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
Nun möchte Ich dass das Datum, der Status und die Message als Tabelle darstellen.

Und genau da liegt das Problem.

Ich weiß nicht wie Ich nur das Datum mittels REGEX ermittle, sowohl als auch Status und Message.

Da Ich damit bisher sehr wenig gearbeitet habe. Zudem ist es aktuell nur bei den Logs notwendig.

Kann mir einer hier erklären wie Ich das lösen kann? :)

Es sollte dann ähnlich so aufgebaut sein:
Unbenannt.PNG

Vielen lieben Dank :)
 

Sempervivum

Erfahrenes Mitglied
#4
Dieses funktioniert bei regex101.com:
Code:
\[(.*)\]~\[(.*)\]: \[(.*)\]
Dabei habe ich darauf verzichtet, das Format von Datum und Uhrzeit genauer zu spezifizieren.
 

EuroCent

Erfahrenes Mitglied
#5
Ich hab das aktuell so:

PHP:
<?php
$re = '/\[(.*)\]~\[(.*)\]: \[(.*)\]/m';
preg_match_all($re, $getNew, $matches, PREG_SET_ORDER, 0); // $getNew ist der Inhalt aus dem LogFile

__checkValues($matches); //printf('<pre>%s</pre>', print_r($matches, true));
?>
Ergebnis:
Code:
Array
(
    [0] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [1] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [2] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [3] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [4] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [5] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )

    [6] => Array
        (
            [0] => [00.00.0000 00:00:00]~[STATUS]: [MESSAGE]
            [1] => 00.00.0000 00:00:00
            [2] => STATUS
            [3] => MESSAGE
        )
)
Jetzt hab Ich verschiedene versuche gestaltet:
mal mit Foreach, mit For und einer While schleife.
Beides brachte mir immer nur ein einziges Ergebnis oO

Meine Tabelle:
HTML:
    <div class="container">
        <table class="table table-hover table-striped table-bordered">
            <thead class="thead-vf">
                <tr>
                    <th>Datum</th>
                    <th>Status</th>
                    <th>Meldung</th>
                </tr>
            </thead>
            <tbody id="loadTimes">
                <tr>
                    <td>00.00.0000 00:00:00</td>
                    <td><span class="badge badge-warning">WARNING</span></td>
                    <td>Meldung</td>
                </tr>
                <tr>
                    <td>00.00.0000 00:00:00</td>
                    <td><span class="badge badge-info">INFO</span></td>
                    <td>Meldung</td>
                </tr>
                <tr>
                    <td>00.00.0000 00:00:00</td>
                    <td><span class="badge badge-danger">ERROR</span></td>
                    <td>Meldung</td>
                </tr>
                <tr>
                    <td>00.00.0000 00:00:00</td>
                    <td><span class="badge badge-primary">NOTICE</span></td>
                    <td>Meldung</td>
                </tr>
                <tr>
                    <td>00.00.0000 00:00:00</td>
                    <td><span class="badge badge-danger">FATAL</span></td>
                    <td>Meldung</td>
                </tr>
            </tbody>
            <tfoot class="tfoot-vf">
                <tr>
                    <th>Datum</th>
                    <th>Status</th>
                    <th>Meldung</th>
                </tr>
            </tfoot>
        </table>
    </div>
 

Sempervivum

Erfahrenes Mitglied
#6
Das Ergebnis-Array sieht doch soweit gut aus.
Beides brachte mir immer nur ein einziges Ergebnis oO
Meinst Du, dass alle Datensätze in dem Array gleich aussehen? Sieht das im Logfile anders aus?
Bei der Tabelle ist das anders, Status variiert. Soll die Tabelle das Sollergebnis darstellen?
 

EuroCent

Erfahrenes Mitglied
#9
Achso :D

Ja das hatte ich jetzt auch fest gestellt :)
Bin gerade unterwegs und würde es danach mal dran hängen oder ich hab was falsch gemacht :D

So ähnlich hatte ich die Foreach Schleife:
foreach($matches as $match => $wert) oder foreach($matches as $match)

Und mal geschaut was bei dabei raus kommt :)
Die For sah so aus:
for($i = 0; $i <= count($matches); $i++)

Und da wirft er mir nur eine Zeile aus statt nach einander durch zu gehen oO

Mehr stell ich ein wenn Ich zuhause bin :)

[EDIT]
So sah meine For-Schleife aus
PHP:
<?php
$loadTableLogs = '';

for($i = 0; $i <= count($matches, COUNT_NORMAL); $i++) {
    
    switch(strtolower($matches[$i][2])) {
        case 'success':
            $stat = 'Erfolg';
            $statCode = 'success';
            break;
        case 'warning':
            $stat = 'Achtung';
            $statCode = 'warning';
            break;
        case 'error':
            $stat = 'Error';
            $statCode = 'danger';
            break;
        case 'fatal':
            $stat = 'FATAL';
            $statCode = 'danger';
            break;
        case 'info':
            $stat = 'Information';
            $statCode = 'info';
            break;
        default:
            $stat = 'Allgemein';
            $statCode = 'secondary';
            break;
    }
    
    $loadTableLogs .= '<tr>'."\r\n";
    $loadTableLogs .= '<td>'.$matches[$i][1].'</td>'."\r\n";
    $loadTableLogs .= '<td><span class="badge badge-'.$statCode.'">'.$stat.'</span></td>'."\r\n";
    $loadTableLogs .= '<td>'.$matches[$i][3].'</td>'."\r\n";
    $loadTableLogs .= '</tr>'."\r\n";
}
?>
 
Zuletzt bearbeitet:

EuroCent

Erfahrenes Mitglied
#10
Hab es doch hinbekommen :D

Mein Fehler war, dass Ich erst die For-Schleife gemacht habe und erst dann das preg_match_all... :D

Jetzt geht es nämlich auch :)

PHP:
<?php
$re = '/\[(.*)\]~\[(.*)\]: \[(.*)\]/m';
$zeile = array();
preg_match_all($re, $getNew, $matches, PREG_SET_ORDER, 0);

$loadTableLogs = '';
$loadTableLogs .= '<tr>'."\r\n";
$loadTableLogs .= '<td colspan="3" style="text-align: center;">keine Daten vorhanden...</td>'."\r\n";
$loadTableLogs .= '</tr>'."\r\n";

if(filter_input(INPUT_POST, 'logPages')) {
    $loadTableLogs = '';
}

for($i = 0; $i < count($matches, COUNT_NORMAL); $i++) {
    
    switch(strtolower($matches[$i][2])) {
        case 'success':
            $stat = 'Erfolg';
            $statCode = 'success';
            break;
        case 'warning':
            $stat = 'Achtung';
            $statCode = 'warning';
            break;
        case 'error':
            $stat = 'Error';
            $statCode = 'danger';
            break;
        case 'fatal':
            $stat = 'FATAL';
            $statCode = 'danger';
            break;
        case 'info':
            $stat = 'Information';
            $statCode = 'info';
            break;
        default:
            $stat = 'Allgemein';
            $statCode = 'secondary';
            break;
    }
    
    $loadTableLogs .= '<tr>'."\r\n";
    $loadTableLogs .= '<td>'.$matches[$i][1].'</td>'."\r\n";
    $loadTableLogs .= '<td><span class="badge badge-'.$statCode.'">'.$stat.'</span></td>'."\r\n";
    $loadTableLogs .= '<td>'.$matches[$i][3].'</td>'."\r\n";
    $loadTableLogs .= '</tr>'."\r\n";
}
?>
 

Neue Beiträge