2016-05-03 3 views
1

Ich habe eine Regex, die nach einem Benutzernamen zwischen 4 und 25 Zeichen Länge, gefolgt von optionalen Leerzeichen und/oder einem einzelnen Komma sucht. Wie Sie vielleicht schon vermutet haben, dient dies dazu, persönliche Nachrichten an mehrere Personen zu senden, indem Sie etwas eingeben wie "Benutzername1, Benutzername2, Benutzername3" ect.PHP preg_match_all gibt keine Werte zurück

$rule = "%^\w{4,25}(+)?,?(+)?$%"; 
preg_match_all($rule, $sendto, $out); 
foreach($out[1] as $match) { 
    echo $match; 
} 

Die Regex scheint seine Arbeit zu tun, obwohl, wenn ich preg_match_all() verwenden, und versuchen, durch alle Werte zu sortieren, es wird nichts an den Browser Echo. Ich vermute, dass ich etwas über preg_match_all falsch verstehe, da meine Regex zu funktionieren scheint.

+0

sollten Sie testen, ob 'preg_match_all () 'war erfolgreich oder nicht bevor versucht wurde $' out' zu konsumieren. – Scuzzy

Antwort

3

Ihre regex eine Capture-Gruppe ([\w]{4,25}) auf den Benutzernamen fehlen, versuchen Sie dies:

<? 
$users = "Username1, Username2  , Username3  "; 
preg_match_all('/([\w]{4,25})(?:\s+)?,?/', $users, $result, PREG_PATTERN_ORDER); 
foreach($result[1] as $user) { 
    echo $user; 
} 
/* 
Username1 
Username2 
Username3 
*/ 

Live Demo


Regex Erläuterung:

([\w]{4,25})(?:\s+)?,? 

Match the regex below and capture its match into backreference number 1 «([\w]{4,25})» 
    Match a single character that is a “word character” (Unicode; any letter or ideograph, any number, underscore) «[\w]{4,25}» 
     Between 4 and 25 times, as many times as possible, giving back as needed (greedy) «{4,25}» 
Match the regular expression below «(?:\s+)?» 
    Between zero and one times, as many times as possible, giving back as needed (greedy) «?» 
    Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s+» 
     Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
Match the character “,” literally «,?» 
    Between zero and one times, as many times as possible, giving back as needed (greedy) «?» 
+0

Ah, das hat mein Problem behoben. Ich schätze die Hilfe, ich bin neu in Regex und es kann überwältigend sein. Ich habe versucht, die letzten paar Stunden das falsche Ding zu reparieren. –