2012-05-30 7 views
3

J'essaie de faire une regex pour correspondre à un certain critère et je ne peux pas le faire fonctionner comme je le veux.PHP regex ne peut pas le faire fonctionner?

Mon regex actuelle est

'/S(?:[0-9]){2}E(?:[0-9]){2}/i' 

Ce que je voudrais à faire est de correspondre aux critères suivants

Un S

Au moins un chiffre 0-9

Un chiffre facultatif peut être 0-9

Un E

Au moins un chiffre 0-9

Un chiffre en option qui peut être 0-9

je voudrais aussi pour correspondre les numéros doubles sur les simples si cela est possible, je fait la regex en suivant des tutoriels sur internet mais pense qu'il me manque quelque chose.

Merci ...

Répondre

7

Essayez ceci:

<?php 

$reg = "#S\d{1,2}E\d{1,2}#"; 

$tests = array('S11E22', 'S1E2', 'S11E2', 'S1E22', 'S111E222', 'S111E', 'SE', 'S0E0'); 

foreach ($tests as $test) { 
    echo "Testing $test... "; 
    if (preg_match($reg, $test)) { 
     echo "Match!"; 
    } else { 
     echo "No Match"; 
    } 
    echo "\n"; 
} 

Sortie:

Testing S11E22... Match! 
Testing S1E2... Match! 
Testing S11E2... Match! 
Testing S1E22... Match! 
Testing S111E222... No Match 
Testing S111E... No Match 
Testing SE... No Match 
Testing S0E0... Match! 

Explication:

$reg = "#S\d{1,2}E\d{1,2}#"; 
     ^^^^^^ 
      | | | | | | 
    Match S | | | | One or two times 
    Match digit | | Match a digit 
One or two times Match the letter E 

EDIT

En option, vous aurait pu le faire avec quelque chose comme

$reg = '#S\d\d?E\d\d?#'; 

Ce qui veut dire, S suivi par chiffre, éventuellement suivi d'un autre chiffre ? ... ainsi de suite.

+0

Les 'E' et' S' sont-ils dans le bon sens dans cette regex? – Gareth

+0

Merci, c'est exactement ce que je cherchais. Il ne semble pas y avoir beaucoup de tutoriels sur ce sujet. Je devine sans vérifier que le '\ d {1,2}' signifie les chiffres 1 ou 2? – Griff

+0

@sberry désolé qui était mon tapant il devrait être 'S' alors' E'! – Griff

Questions connexes