2010-08-31 5 views
2

Possible en double:
What regular expression can never match?expression régulière qui retourne false toujours

comment puis-je écrire une expression régulière qui retourne false toujours en php.

Je voulais ce bcos. je voulais afficher un msg d'erreur avec une règle de forme ... donc je l'ai fait comme ça ..

if($values['result_msg'] == 'ERROR') 
        { 
        $form->registerRule('just_check','regex','/$^/');      
        $form->addRule('abc', 'Please enter valid Model Number.','just_check'); 
        } 
+3

je ne vois pas comment cette question pratique est – stillstanding

+0

pour quelle raison? if (preg_match (...)) never_perform_this(); ?? –

+0

+1 parce que c'est la question la plus ridicule que j'ai jamais vu dans SO – fabrik

Répondre

6

Il y a beaucoup de façons de le faire:

  • /(?=a)b/

Cela ne correspond pas parce qu'il recherche un caractère qui est à la fois a et b.

  • /\Zx\A/

Cela ne correspond pas parce que la fin de la chaîne ne peut pas venir avant le début de la chaîne.

  • /x\by/

Cela ne correspond pas parce qu'une limite de mot ne peut pas être entre les personnages x et y.

+0

J'aime beaucoup $ ^^. –

+1

@Pekka: En PHP, il est nécessaire d'avoir un caractère entre $ et^sinon il correspond à la chaîne vide, '$ x^'par exemple. –

6

Je ne sais pas pourquoi vous voulez faire, mais ça va le faire:

(?!x)x 

le premier bit (?! .. ) est un négatif qui dit préanalyse « assurez-vous que cette position ne correspond pas au contenu de ce test avant », où le contenu est x, puis la finale x dit « match x "- puisque ces deux sont opposés, l'expression ne correspondra jamais.

Vous pouvez également ajouter des marqueurs de début/fin, à savoir

^(?!x)x$ 

Vous pouvez échanger à la fois le x avec quoi que ce soit à peu près, tant que les deux bits sont équivalents.

Il existe de nombreuses autres façons de le faire, vous devez simplement mettre deux conditions mutuellement exclusives l'une à côté de l'autre pour correspondre au même emplacement, et l'expression régulière échouera - voir Mark's answer pour plus d'exemples.

+0

qu'est-ce qu'il essaie de faire? – Hacker

+0

pradeep, il y a une explication là maintenant. Bien que * vous * n'avez pas expliqué pourquoi vous le voulez en premier lieu, il y a probablement une meilleure solution. –

+0

@pradeep - @Peter vous a dit ce qu'il faisait, qu'est-ce que vous ne comprenez pas? – slugster

0

Essayez ceci:

$.^ 
+1

Si l'indicateur multilall dotall est activé, cela ne correspondrait-il pas à un caractère de retour à la ligne? –

+0

@Peter: non. faites attention à l'ordre de '$' et '^'. – NikiC

+0

nikic, faites attention à ce que je dis! Si l'indicateur multiligne est activé, '$' correspond à "fin de ligne" et '^' correspond à "début de ligne". Si le drapeau dotall est activé '.' correspond à newline. Par conséquent, avec les drapeaux multiline + dotall, '$. ^' Correspondra au caractère de nouvelle ligne (\ n) dans 'x \ ny'. –