php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.12.2011, 21:01  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard [Erledigt] String zerlegen

Hallo zusammen,

ich habe mir meine ein kleines Script geschrieben das mir einen einen String zerlegt:

PHP-Code:
$text 'Programm Version Information:
             Programm  Version: 1.5.0.1-fgz
             Programm  Engine: C# 1.1, jpp-x86 (build 1.5.0-dev)
             Programm  API: v1 = 4, v2 = 3
             Compiled on: Oct 28 2011 19:27:10
             Build ID: 3427:97d8e8c6e302-dfsr
             http://www.test.de/
            '
;
$info preg_split('/\r\n|\n\r|\n|\r/'$text);
            
array_pop($info);

foreach(
$info as $key => $value){
    
$info[$key] = split(':',trim($value));

Das Ergebnis schaut so aus:
PHP-Code:
Array
(
    [
0] => Array
        (
            [
0] => Programm Version Information
            
[1] => 
        )
    [
1] => Array
        (
            [
0] => Programm Version
            
[1] =>  1.5.0.1-fgz
        
)
    [
2] => Array
        (
            [
0] => Programm  Engine
            
[1] =>  C# 1.1, jpp-x86 (build 1.5.0-dev)
        
)
    [
3] => Array
        (
            [
0] => Programm  API
            
[1] =>  v1 4v2 3
        
)
    [
4] => Array
        (
            [
0] => Compiled on
            
[1] =>  Oct 28 2011 19
            
[2] => 27
            
[3] => 10
        
)
    [
5] => Array
        (
            [
0] => Build ID
            
[1] =>  3427
            
[2] => 97d8e8c6e302-dfs
        
)
    [
6] => Array
        (
            [
0] => http
            
[1] => //www.test.de/
        
)


Jetzt möchte ich den String gerne mit einem regulären Ausdruck zerlegen,
da ich jede Zeile nur einmal am ersten ':' teilen will,
und alles vor dem ':' als 'key' und alles danach als 'value' im array stehen soll.
Z.b. So:

PHP-Code:
Array
(
    [
0] => Array
        (
            [
Programm Version Information] =>
        )
    [
1] => Array
        (
            [
Programm Version] =>  1.5.0.1-fgz
        
)
    [
2] => Array
        (
            [
Programm  Engine] => C# 1.1, jpp-x86 (build 1.5.0-dev)
        
)
        
u.s.w...

Kann mir jemand weiter helfen oder zeigen wie dieser regulären Ausdruck ausschaut?
Versuch es schon den ganzen Tag und komme einfach nicht weiter

Gruß,
HSFighter
__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!

Geändert von HSFighter (29.12.2011 um 21:15 Uhr).
HSFighter ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.12.2011, 21:06  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Sorry für den Doppelpost!
__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!
HSFighter ist offline   Mit Zitat antworten
Alt 29.12.2011, 23:16  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Was ist mit explode und dem limit - parameter?
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Alt 29.12.2011, 23:52  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Habe ich auch schon mit herum probiert.
Aber ich wüsste nicht wo bei mir der limit - parameter helfen kann?

Ich möchte ja alles aus einer Zeile hinter dem ersten ':' zusammen fassen.

Geht also für "Compiled on: Oct 28 2011 19:27:10" nicht
__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!
HSFighter ist offline   Mit Zitat antworten
Alt 30.12.2011, 00:15  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Habe es jetzt Ohne-Regulären-Ausdruck* gemacht:

PHP-Code:
$info preg_split('/\r\n|\n\r|\n|\r/'$text);
array_pop($info);
foreach(
$info as $key => $value){
    
$pos strpos(trim($value), ':');
    
$out[substr(trim($value), 0$pos)] = substr(trim($value), $pos 2);

Mit einem regulären Ausdruck ist es zwar schöner, aber hiermit kann ich auch leben.

Gruß,
HSFighter
__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!
HSFighter ist offline   Mit Zitat antworten
Alt 30.12.2011, 00:19  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Zitat:
Zitat von HSFighter Beitrag anzeigen
Habe ich auch schon mit herum probiert.
Aber ich wüsste nicht wo bei mir der limit - parameter helfen kann?

Ich möchte ja alles aus einer Zeile hinter dem ersten ':' zusammen fassen.

Geht also für "Compiled on: Oct 28 2011 19:27:10" nicht
PHP-Code:
$a "Compiled on: Oct 28 2011 19:27:10";
$arr explode(":",$a,2);
print_r($arr); 
gibt aus:

Array ( [0] => Compiled on [1] => Oct 28 2011 19:27:10 )
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Alt 30.12.2011, 00:26  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

edit: Zu spät, drsoongs Lösung sieht beduetend besser aus, auch wenn man dort vorher und nachher noch mit Arrays rumspielen muss.

Ich würde es spontan (es ist spät, es gibt sicher bessere Möglichkeiten) über die regulären Stringfunktionen und ohne Regex machen(obwohl diese Möglichkeit evtl. flexibler wäre, aber da dein Format wohl feststeht...).:

PHP-Code:
<?php
$text 
= <<<'INPUT'
Programm Version Information
             
Programm  Version1.5.0.1-fgz 
             Programm  Engine
C# 1.1, jpp-x86 (build 1.5.0-dev) 
             
Programm  APIv1 4v2 
             Compiled on
Oct 28 2011 19:27:10 
             Build ID
3427:97d8e8c6e302-dfsr 
             http
://www.test.de/
INPUT;

$text_array explode("\n",$text);
array_walk($text_array, function($val$key) use (&$text_array) {
    
$text_array[$key] = trim($val);
});    
foreach(
$text_array as $line){
    
$position strpos($line':');
    if(
substr($line$position3) === '://'){
        
$result['url'][] = $line;
        continue;
    }
    
$result[substr($line0$position)] = substr($line$position +1);
}
echo 
'<pre>';
print_r($result);
edit: Fixed : Nur alleinstehende Urls gelten als Url und es sind mehrere möglich, ohne das der Key überchrieben wird
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL

Geändert von Suralc (30.12.2011 um 01:00 Uhr).
Suralc ist offline   Mit Zitat antworten
Alt 30.12.2011, 03:01  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Danke schön euch beiden.

Hätte schwören können das ich es mit "explode" und "2" als limiter versucht habe. hmmm

Aber es funktioniert jetzt

Anbei der fertige code:



PHP-Code:
$text 'Programm Version Information:
             Programm Version: 1.5.0.1-fgz
             Programm Engine: C# 1.1, jpp-x86 (build 1.5.0-dev)
             Programm API: v1 = 4, v2 = 3
             Compiled on: Oct 28 2011 19:27:10
             Build ID: 3427:97d8e8c6e302-dfsr
             http://www.test.de/
            '
;

$info preg_split('/\r\n|\n\r|\n|\r/'$text);
array_pop($info);
foreach(
$info as $key => $value){
  
$arr explode(":",trim($value),2);
  if (
$arr[0] == "http"){
    
$out['URL'] = substr(trim($value), 0, -1);
  }else{
    
$out[$arr[0]] = trim($arr[1]);
  }

Result:
PHP-Code:
Array
(
    [
Programm Version Information] => 
    [
Programm Version] => 1.5.0.1-fgz
    
[Programm Engine] => C# 1.1, jpp-x86 (build 1.5.0-dev)
    
[Programm API] => v1 4v2 3
    
[Compiled on] => Oct 28 2011 19:27:10
    
[Build ID] => 3427:97d8e8c6e302-dfsr
    
[url] => http://www.test.de

__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!
HSFighter ist offline   Mit Zitat antworten
Alt 30.12.2011, 13:09  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

Deine Lösung schlägt aber fehl, sobald die URL das Protokoll wechselt(z.B. https), oder sobald sie nicht mehr alleine steht.
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc ist offline   Mit Zitat antworten
Alt 30.12.2011, 13:26  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 124
HSFighter zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Stimmt, das würde zu Problemen führen!

Durch die Quelle ist es zum Glück vorgegeben dass die URL alleine steht.

Also müsste ein
PHP-Code:
 if (($arr[0] == "http") or ($arr[0] == "https")){ 
ausreichen.
__________________
Wieso, weshalb, warum?
Wer nicht fragt bleibt dumm!
HSFighter ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
String zerlegen? ryder PHP Einsteiger 2 08.11.2011 20:20
Knoten im Kopf, aus mehrdim. Array INSERT .. VALUES (..), (..) machen Chriz PHP Einsteiger 11 21.01.2011 15:55
[Erledigt] String von Sonderzeichen und Zahlen befreien pfump PHP Tipps 2010 10 19.11.2010 16:08
Sphider Umlaute und MySQL Fehler xnic Datenbanken 2 03.08.2010 20:10
String in Array zerlegen Schnatterinchen PHP Tipps 2010 3 15.02.2010 12:45
Scriptangebot Codieren von Texten Ryuuzaki93 Scriptbörse 9 08.02.2010 23:14
Records mit PHP ? SimStar001 PHP Tipps 2009 11 08.04.2009 15:14
PHP5 SOAP - Problem mit Arrays Calexico PHP-Fortgeschrittene 0 11.09.2008 12:06
String zerlegen PHP Tipps 2005 4 06.05.2005 20:42
String in seine Einzeilteile zerlegen PHP Tipps 2005 2 08.04.2005 00:09
String zerlegen und jeweils als Bild ausgeben PHP Tipps 2005 6 08.02.2005 15:19
String zerlegen im Array PHP Tipps 2004 4 29.06.2004 08:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php string teilen key value, programm zeilen zerlegen, php ausdruck zerlegen, url mit regulärenausdruck zerlegen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum