PCRE pattern problem

hallöchen Leute - ich bin heute zu doof das Suchmuster so hinzukriegen wie ich will

eingabe Strings sehen z.B. so aus:
, “string1”, 123, ‘string2’

mein pattern

vermutlich viel überflüssiges etc etc - lern es halt gerade noch
dürft mich gern belehren

also das oder | funktioniert nicht so wie ich es mir vorstelle
gleich begrenzte strings frisst das pattern und gibt immer nur den letzten davon wieder
und unterschiedlich begrenzte strings (bzw. ‘int im string’) werden nicht in der reihenfolge wie sie auftreten geloggt, sonder nach dem pattern
also preg_match liefert auf [1] den letzten durch “”, begrenzten string
[2] den letzten durch ‘’, begrenzten
und [3] die letzte unbegrenzte (,) ziffernfolge

ein beispiel

$str = ", 1, '2', \"echo\", 'abcd'"; $regex = "#(?:\s?,\s?(?:'([^']*)'|\"([^\"]*)\"|(\d*)))*#uis"; preg_match($regex, $str, $regs); print_r($regs);

gibt folgendes aus:

Array ( [0] => , 1, '2', "echo", 'abcd' [1] => abcd [2] => echo [3] => 1 )

ich hoffe ich habe mein Problem ausführlich genug dargelegt
grüße

pop

Ich habe deinen Regex jetzt nicht getestet, aber das funktioniert bei mir:
String: , 1, ‘2’, “echo”, “ec"ho”, ‘abcd’, ‘ab’cd’, h
Regex: #(?:^|,)\h*("(?:\"|[^"])"|’(?:\’|[^’])|[^,]*’)#uis

$string = ", 1, '2', \"echo\", \"ec\\\"ho\", 'abcd', 'ab\\'cd', h, 'text, mit Komma'"; $regex = "#(?:^|,)\h*(" . '"(?:\\\\"|[^"])*"' . "|'(?:\\\\'|[^'])*|[^,]*')#uis"; $result = array(); preg_match_all($regex, $string, $result);

[code]Array
(
[0] => Array
(
[0] =>
[1] => , 1
[2] => , ‘2’
[3] => , “echo”
[4] => , “ec"ho”
[5] => , ‘abcd’
[6] => , ‘ab’cd’
[7] => , h
)

[1] => Array
    (
        [0] => 
        [1] => 1
        [2] => '2'
        [3] => "echo"
        [4] => "ec\"ho"
        [5] => 'abcd'
        [6] => 'ab\'cd'
        [7] => h
    )

)[/code]
Edit: Hab einen kleinen Fehler gefunden.
Edit: Falsche Reihenfolge im RegExp

haha okay, läuft, danke

natürlich ist es ((?:)(?:)(?:slight_smile: und nicht (?:()()())
und dann noch preg_match_all statt preg_match

manchmal hat man echt nen falschen Fokus

bist du sicher, dass du das mit RegEx machen musst?, hier würde meiner Meinung nach auch ein explode(’,’, $string) mit Nacharbeit reichen