php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.08.2008, 14:05  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 6
fridhi befindet sich auf einem aufstrebenden Ast
Standard Regexp gesucht

Hallo,

leider bin ich in Sachen Regexp nicht sonderlich fit.
Ich suche eine Regex die mir Strings nach dem folgenden Muster außereinander nimmt.

string/int_string/int_"/'string/int"/'

Also das heißt ich habe beliebig viele Zeichenketten zwischen beliebig vielen Leerzeichen wenn aber ein String in " oder ' steht soll er auch wenn leerzeichen dazugehören als einer erkannt werden, diesem String sollten dann " oder ' maskierbar sein also \'

Beispiel

copy abc de fghi "Test Test \"Test\" Test \'Test\' Test" 'Test'

Sollte dann folgendes geben:
Array (
0 => copy
1 => abc
2 => de
3 => fghi
4 => Test Test \"Test\" Test \'Test\' Test
5 => Test
)

Kann mir da jemand helfen ?
fridhi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 23.08.2008, 14:22  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Also wenn du mit verschiedenen Quotation-Marks (" und ') arbeitest, bleibt dir wohl nichts anderes übrig, als den String Zeichen für Zeichen in einer Schleife durchzugehen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 23.08.2008, 23:13  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Nein das geht mit reg Expr. Hab ich schon mal gemacht. Du mußt das vorhergehende Zeichen mitbeachten (ob Escape). Muß mal suchen....
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 24.08.2008, 03:15  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

PHP: fgetcsv - Manual
Chriz ist gerade online   Mit Zitat antworten
Alt 24.08.2008, 11:44  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

@nikosch: ich weiß, aber das Problem ist die Verschachtelung.
Zum Beispiel jenes:

"123 'ein String im String' 456"

Oder noch schlimmer

"123 ' nur ein Quotation-Zeichen "

Da wäre mir jetzt kein RegEx bekannt, der das könnte. Aber vielleicht kannst du mich ja eines Besseren belehren.


SPÄTES EDIT:
Ich hatte das aus Versehen im falschen RegExp-Thread an meinen Post angefügt. Jetzt füge ich es hier an (bezieht sich auf den folgenden Post):
Zitat:
@nikosch: da magst du Recht haben. Muss ich beizeiten mal ausprobieren.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems

Geändert von Manko10 (24.08.2008 um 22:42 Uhr).
Manko10 ist offline   Mit Zitat antworten
Alt 24.08.2008, 12:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Entscheidend ist die Reihenfolge. Du mußt erst dem Ausdruck zwei Varianten mit den verschiedenen paarweisen Quotzeichen zum matchen anbieten und als dritte Option dann die Variante ohne Quoting.
Also Pseudocode:
"[^"]*"|'[^']*'|.*
Entscheidend ist, dass der Ausdruck zuerst auf gequotete Varianten anspringen kann. Evtl. war auch noch ne word boundary und/oder führende/folgende Leerzeichen mit am Start.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 24.08.2008, 22:31  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

fgetcsv() erledigt das bereits, allerdings nur fuer ein enclosure:
Zitat:
Set the field enclosure character (one character only). Defaults as a double quotation mar
Ich frag mich manchmal allerdings, was solche bescheuerten Fantasy-Speicherformate sollen. Wer sowas anlegt, sollte dafuer halt auch selbst seinen Reader schreiben.

Vielleicht mal an den Autor:
http://de.wikipedia.org/wiki/CSV_(Dateiformat)
http://en.wikipedia.org/wiki/XML

Geändert von Chriz (24.08.2008 um 22:33 Uhr).
Chriz ist gerade online   Mit Zitat antworten
Alt 25.08.2008, 00:11  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 6
fridhi befindet sich auf einem aufstrebenden Ast
Standard Also meine Lösung

Hallo,
hier nochmal der Fragensteller Also regex wurde mir auch zu komplex habe dann mal folgendes gebaut:

PHP-Code:
 // String
        
$input_data 'Test "Test \"test\" \'test\'" \'test "test"\' test';

        
// Erlaubte Quotations
        
$quotations_array = array (
            
=> '"',
            
=> "'"
        
);

        
//Leerzeichen an Input_data
        
$input_data .= ' ';

        
// Quotation auf false;
        
$quotation == false;

        
// Zeichenkette durchlaufen
        
for($i=0;$i<strlen($input_data);$i++) {
            if(
in_array($input_data[$i], $quotations_array)) {
                if (@
substr($buffer,(strlen($buffer)-1),1) != '\\') {
                    if(
$quotation == false) {
                        
$quotation true;
                        
$quotation_input_data $input_data[$i];
                    } else {
                        if (
$input_data[$i] == $quotation_input_data) {
                            
$quotation false;
                        }
                    }
                }
            }
            if(
$input_data[$i] != ' ') {
                
$buffer.= $input_data[$i];
            } else {
                if (
$quotation == true) {
                    
$buffer.= $input_data[$i];
                } else {
                    if (
$buffer != ''$buffer_array[] = trim($buffer);
                    
$buffer '';
                }
            }
        }

        if (!empty (
$buffer)) $buffer_array[] = trim($buffer); 
das gibt dann im bei dem String von oben folgenden Array:

PHP-Code:
Array
(
    [
0] => Test
    
[1] => "Test \"test\" 'test'"
    
[2] => 'test "test"'
    
[3] => test

Hab es jetzt mal paarmal getestet und scheint eigentlich ganz gut zu funktionieren. Quotations sind sogar variabel

Was meint ihr ?
fridhi ist offline   Mit Zitat antworten
Alt 25.08.2008, 00:15  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Und das ganze um eine Textdatei zu parsen, die auch nicht mehr kann als eine gewohnliche CSV Datei, fuer die ein Parser in 4 Zeilen passt.
Chriz ist gerade online   Mit Zitat antworten
Alt 25.08.2008, 00:19  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 6
fridhi befindet sich auf einem aufstrebenden Ast
Standard

Um eine Textdatei geht es hier nicht sondern um befehle von der Shell
also z.b.
copy abc def "bla bla" "bla bla" usw.
kann natürlich einiges komplexer sein
fridhi 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
On Mouse Over Menu für PHP gesucht! litterauspirna PHP Tipps 2008 9 23.05.2008 22:02
regexp Timo Trallala PHP Tipps 2006 3 05.09.2006 12:40
Regexp Tags matchen cytrobic PHP Tipps 2006 15 21.07.2006 19:47
[Erledigt] REGEXP und Collations Datenbanken 2 14.03.2006 14:22
gesucht: regexp, der img-tags erkennen kann. PHP Tipps 2006 34 07.03.2006 18:27
pimps mit hirn gesucht Beitragsarchiv 12 20.08.2005 18:42
Redakteure für sehr großes Projekt gesucht Beitragsarchiv 1 19.08.2005 01:57
PHP Programmierer und Grafiker für größeres Projekt gesucht Beitragsarchiv 9 11.08.2005 22:56
Freelancer gesucht Beitragsarchiv 1 17.05.2005 14:03
brauche kleine REGEXP hilfe mAy^daY Datenbanken 3 08.02.2005 23:57
Bräuchte hilfe bei einem Regexp Chr!s PHP Tipps 2005 1 27.01.2005 16:39
[Erledigt] Hilfe oder ducumentation gesucht... PHP Tipps 2005 5 12.01.2005 17:13
Unterricht in PHP / MySQL im Raum Kiel gesucht Beitragsarchiv 5 20.10.2004 08:43
einfaches PHP-Forum gesucht BITTE HELFEN PHP Tipps 2004 4 10.07.2004 22:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
in_array regexp, php fgetcsv führende leerzeichen, regex \quotation marks\, regex csv datei parsen, html erlaubte quotation, regex verschachtelungen php -bb -tag, regex csv-datei, regexp_like 1 oder 2 leerzeichen, regex reihenfolge

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:33 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