2009-07-01 6 views
4

J'ai deux chaînes que je veux faire correspondre à tout ce qui ne les égalent pas, la première chaîne peut être suivie d'un certain nombre de caractères. J'ai essayé quelque chose comme ça, en niant deux ors et en niant ce résultat.Regex AND'ing

?!(?!^.*[^Factory]$|?![^AppName]) 

Des idées?

+0

pour clarifier Je veux correspondre tout ce qui ne se termine pas par le mot « usine » ou n'est pas égal au mot « AppName » – jtruelove

Répondre

3

La réponse de DFA est de loin la meilleure option. Mais si vous ne pouvez pas l'utiliser pour une raison quelconque, essayez:

^(?!.*Factory|AppName) 

Il est très difficile de déterminer à partir de votre question et votre regex ce que vous essayez de faire; ils semblent impliquer des comportements opposés. La regex que j'ai écrite ne correspondra pas si Factory apparaît n'importe où dans la chaîne, ou AppName apparaît au début de la chaîne.

0

Cela fonctionnerait-il si vous recherchiez l'existence de ces deux chaînes et annuliez l'expression régulière?

3

Qu'en est-

if (!match("(Factory|AppName)")) { 
    // your code 
} 
4

Essayez cette expression régulière:

(?!.*Factory$|.*AppName)^.* 

Cela correspond à chaque chaîne qui ne se termine pas avec Factory et ne contient pas AppName.