2010-08-31 5 views

Répondre

2
/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/ 

code PHP:

if (preg_match(...put regex here..., $stringToTestAgainst)) { 
    // ... 
} 

note: Plus wor ds (par ex. 'douze') peut facilement être ajouté à l'expression rationnelle.

+0

merci sera cette poignée d'espaces entre les mots? –

+0

@Sherif, oui. Notez que vous devrez mettre l'expression régulière dans une chaîne ('" /.../ "'), et vous devrez probablement échapper le '\ s' (=>' \\ s'). – James

+1

Les nombres autorisés vont de zéro à neuf mais pas à dix – Toto

4

Vous pouvez le faire comme ceci:

\b(?:(?:zero|one|two|three|four|five|six|seven|eight|nine)(?: +|$)){4} 

(Rubular)

0
if (preg_match("/(?:\b(?:(one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine))\b\s*?){4,}/", $variable_to_test_against, $matches)) { 
    echo "Match was found <br />"; 
    echo $matches[0]; 
} 

EDIT:

espace Ajouté (s) dans l'expression régulière - grâce à Kobi.

+2

Vous n'avez pas d'espaces entre les mots? – Kobi

3

Une autre option est:

\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4} 

C'est à peu près la même chose que le reste. Le seul bit intéressant est la partie \s*? - qui va paresseusement correspondre aux espaces entre les mots, de sorte que vous ne vous retrouvez pas avec des espaces supplémentaires après la séquence de 4 mots. Le \b avant qu'il ne s'assure il y a au moins un seul espace (ou autre séparateur après le dernier mot, donc !a b c d! correspondra)

+1

+1 J'aime assez cette approche. Voici un lien Rubular pour cela: http://rubular.com/r/Fm4dGwkNGg ... Vous avez oublié zéro cependant. –

+0

@Mark - Merci. Je l'ai testé là aussi, j'ai juste oublié le lien. J'ai zéro, mais il n'est pas trié ':)' – Kobi

+0

Oh oui, il est trié dans l'ordre du clavier. J'aurais dû remarquer que zéro est l'un des exemples dans le lien rubulaire. Pardon. :) –

Questions connexes