2016-07-15 12 views
0

Ich habe eine String-Variable, die durch Verkettung größer wird. Ich muss jeden Teilstring (jede Schleifeniteration) validieren.wie Schritt für Schritt

Ich erstellte ein Muster, um die endgültige gültige Form der Zeichenfolge zu entsprechen.

Wie kann ich jeden Teilstring (teilweise, aber in der richtigen Reihenfolge) des Strings validieren?

$pattern = "#\{/?MYTAG(\d*)?\}#i" 
    $myString = '' 

    while (true) { 
    $myString .= $aChar; 

     // { => valid 
     // {m => valid 
     // {my => valid 
     // {myz => invalid break the loop 

     if (preg_match($pattern, $myString)) { 

     } 
    } 

Ich habe versucht, die ? geändert, um das Zeichen optional zu machen. Aber dann stimmt es mit der Teilzeichenfolge überein:

// {mysdf 
// it matches {my 
// I want to return false, not get the valid part of the string 

Ich hoffe, das macht Sinn.

+0

Sie suchen wahrscheinlich so etwas wie: 'while (preg_match ($ pattern, $ myString)) {' – arkascha

+0

@arkascha Mein Muster stimmt nur mit der endgültigen Form der Zeichenfolge überein, also wird dies nicht funktionieren. dh es passt nur, wenn es komplett ist – giannisf

+2

Sie können nicht, PHP regexes unterstützt nicht fuzzy/teilweise übereinstimmen. Sie müssen einen anderen Weg finden. * (Zum Beispiel können Sie auf die schließende geschweifte Klammer "warten" und dann Ihr Muster testen) * –

Antwort

1

Wenn Sie testen möchten, ob die Zeichenfolge, die Sie bisher haben, gültig ist, aber die Regex nur mit der letzten Zeichenfolge übereinstimmt, warum dann nicht die restlichen Zeichen der letzten Zeichenfolge hinzufügen und bei jeder Iteration testen?

Wenn die aktuelle Zeichenfolge "my" ist und Sie nach "mytag" suchen, verketten Sie "mytag" .substring (2) mit "my", um die letzte Zeichenfolge zu erstellen. Wenn die Regex mit der verketteten Zeichenfolge übereinstimmt, wissen Sie, dass die Zeichenfolge, die Sie bisher verwendet haben, gültig ist.

Ignoriere die spezifische substring() - Funktion, die ich dort habe - es ist nur ein Pseudocode.

Hier ist ein vollständigeres Beispiel (das nicht PHP-Methode tatsächlich Teilzeichenfolge Anspruch nimmt - ich habe nicht wirklich weg und sah es nach oben):

$pattern = "#\{/?MYTAG(\d*)?\}#i"; 
$myString = ''; 
$counter = 0; 
$finalString = "MYTAG"; 

while (true) { 
$myString .= $aChar; 

    // { => valid 
    // {m => valid 
    // {my => valid 
    // {myz => invalid break the loop 

    if (preg_match($pattern, $myString . $finalString.substring($counter + 1))) { 

    } 
    $counter++; 
} 

Der große Nachteil, wenn Sie dies nur funktioniert, ist kenne die endgültige Saite vorher, aber es scheint so als ob du es tust. Aber abgesehen davon könnte dies als eine nette kleine Abhilfe dienen. Bitte beachten Sie noch einmal, dass die spezifische Substring-Funktion, die ich verwendet habe, Pseudocode ist - ich habe die PHP-Substring-Funktion nicht wirklich nachgeschlagen, aber ich weiß, dass eine existiert.

BEARBEITEN: Hoppla, ich habe @ Arkaschas Kommentar nicht gesehen, bevor ich das gepostet habe. Dies ist ein Beispiel für das, worüber sie sprechen.

Verwandte Themen