سؤال

In my PHP program I have some regular expressions defined only at run-time. How can I write a regular expression that match everything else those matches don't catch?

var_dump(preg_match("#^Bob$#", 'Bob'));
var_dump(preg_match("#^Alice$#", 'Alice'));

The regular expression I need is everything else than ^Bob$ and ^Alice$.

I tried using

var_dump(preg_match("#(?(?=(^Bob$|^Alice$))|^$|.*)#", 'John'));

but the preg_match function gave me Warning: preg_match(): Compilation failed: conditional group contains more than two branches at offset 27

هل كانت مفيدة؟

المحلول

You used a condition (the first group starting with ?) with wrong syntax, thats your Warning.

But I think you don't need a conditional regex, try

 var_dump(preg_match("#^(?!(Bob|Alice)$).*#", 'John'));

I moved the Anchor ^ to the very start of the expression and $ outside the alternation, so it is valid for both alternatives.

This regex will match every string (without newline characters), that is not only "Bob" or "Alice".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top