2016-07-20 17 views
2

Ich habe in einige Probleme im Zusammenhang mit regulären Ausdruck und Muster geraten. meine Eingabe muss mehrmals im Format von A oder B oder Kombination von A und B sein.Regex in PHP, um ein Muster zu validieren

es zu illustrieren

Ein Muster ist x (y)

B Muster x (y, z)

A, B bedeutet, x (y), x (y, z)

Kombinationen können, wie, aber nicht beschränkt auf

A, A

A, A, A

A, B, A

B, B

B, B, B

usw. ohne spezifische Zahlen pro Kombination. gibt es eine verfügbare Methode, um zu überprüfen, ob A und B in der Kombination das richtige Format haben.

, was ich denke, ich tun sollte, ist die Kombination in einem Begrenzer zu spalten und dann jedes Array-Element durch eine Funktion übergeben, die meine A und B bestätigt

$rule=$_POST['rule'];        //e,g aaa(bbb,ccc) OR aaa(bbb) 
$patternR1='/^\w+[\(]\w+[\)]$/'; 
$patternR2='/^\w+[\(]\w+[\,]\w+[\)]$/'; 
if (preg_match($patternR1, $rule)) 
    { 
     echo "Your entered rule is ".$rule." satisfying the correct format: x(y)"; 

    } 
    else if(preg_match($patternR2, $rule)) 
    { 
     echo "Your entered rule is ".$rule." satisfying the correct format: x(y,z)"; 
    } 
    else 
    { 
     echo "Syntax error in the rule body ". $rule." has to be either in x(y) or x(y,z) format"; 
     $ef=0; 
    } 

Bitte beachten Sie auch, dass ein Komma gibt es die trennt A und B und es gibt Komma innerhalb des Musters B, die im Kontext unterschiedliche Bedeutung haben.

Antwort

4

Die RegExp Sie suchen ist

/^(?<foo>\w\(\w(,\w)?\))(,(?&foo))*$/gi 

und man konnte es testen und spielen, um mit ihm here

So das Muster namens foo verallgemeinert, was Sie A und B genannt, das heißt \w\(\w(,\w)?\) . Dann erlauben wir die Rekursion dieses Musters mit einem vorangehenden Komma. Das ist es.

Verwandte Themen