2017-07-13 4 views
0

Ich möchte eine Zeichenfolge basierend auf bestimmten Bedingung explodieren.Explodieren Sie eine Zeichenfolge basierend auf Letzte schließende Klammer

Ich habe versucht eine Reihe von Möglichkeiten, aber kann es nicht richtig funktionieren.

String

Do 13 Jul 2017 10.45.37: rlm_perl: PPPoE.Auth.INFO: educationhome, NAS_IP 133.1.92.86, PAY_PLAN 0, CLIENT_MAC 80: 2A: A8: 6C: F6: 14) Do 13. Juli 10:45:37 2017: Auth: Login OK: [Educationhome] (vom Client Mikrotik Port 15833926 Cli 80: 2A: A8: 6C: F6: 14) Do Jul 13 10:45:44 2017: Auth : ungültige Benutzer (Konto abgelaufen [Expiration 9. Juli 2017]): [chudamanimrg] (vom Client mikrotik Port 16.076.961 cli 80: 2A: A8: 0E: 37: FE)

Erwarteten Ausgabe

01.235.
array(
'Thu Jul 13 10:45:37 2017 : rlm_perl: PPPoE.Auth.INFO: educationhome, NAS_IP 113.1.92.86, PAY_PLAN 0, CLIENT_MAC 80:2A:A8:6C:F6:14', 
'Thu Jul 13 10:45:37 2017 : Auth: Login OK: [educationhome] (from client mikrotik port 15833926 cli 80:2A:A8:6C:F6:14)', 
'Thu Jul 13 10:45:44 2017 : Auth: Invalid user (Account has expired [Expiration 09 Jul 2017]): [chudamanimrg] (from client mikrotik port 16076961 cli 80:2A:A8:0E:37:FE)' 
); 

Ich versuchte es mit aktuellen Tag Thr explodiert, aber dann würde es für die alten Protokolle arbeiten ('Wed' Tue' ....)

$day = date("D"); 
$lines = explode($day,$lines); 

Ich möchte $lines die Zeichenfolge zu explodieren basierend auf dem Namen des Tages

$arr = ['Sun','Mon','Tue','Wed','Thr','Fri','Sat']; 

Ich kann das nicht richtig machen.

+0

zeigt die genauen gewünschten Ausgang – peterm

+0

@peterm ich die Frage aktualisieren tat. – prakashchhetri

+0

Verwenden Sie einen regulären Ausdruck – AlexM

Antwort

1

Die Lösung mit preg_split und array_chunk Funktionen:

$lines = 'Thu Jul 13 10:45:37 2017 : rlm_perl: PPPoE.Auth.INFO: educationhome, NAS_IP 103.1.92.86, PAY_PLAN 0, CLIENT_MAC 80:2A:A8:6C:F6:14 Thu Jul 13 10:45:37 2017 : Auth: Login OK: [educationhome] (from client mikrotik port 15833926 cli 80:2A:A8:6C:F6:14) Thu Jul 13 10:45:44 2017 : Auth: Invalid user (Account has expired [Expiration 09 Jul 2017]): [chudamanimrg] (from client mikrotik port 16076961 cli 80:2A:A8:0E:37:FE) '; 
$days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 

$result = preg_split('/\b(' . implode('|', $days). ')\b/', $lines, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
$result = array_map(function($v){ 
    return $v[0] . $v[1]; 
}, array_chunk($result, 2)); 

print_r($result); 

Der Ausgang:

Array 
(
    [0] => Thu Jul 13 10:45:37 2017 : rlm_perl: PPPoE.Auth.INFO: educationhome, NAS_IP 103.1.92.86, PAY_PLAN 0, CLIENT_MAC 80:2A:A8:6C:F6:14 
    [1] => Thu Jul 13 10:45:37 2017 : Auth: Login OK: [educationhome] (from client mikrotik port 15833926 cli 80:2A:A8:6C:F6:14) 
    [2] => Thu Jul 13 10:45:44 2017 : Auth: Invalid user (Account has expired [Expiration 09 Jul 2017]): [chudamanimrg] (from client mikrotik port 16076961 cli 80:2A:A8:0E:37:FE) 
) 

Demo link

Verwandte Themen