2010-08-31 2 views
2

Можно создать дубликат:
What regular expression can never match?регулярное выражение, которое возвращает ложное всегда

как я написать регулярное выражение, которое возвращает ложь всегда в PHP.

Я хотел этот bcos. я хотел, чтобы отобразить Сообща ошибку с из правила формы ... так что я сделал, как это ..

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

я не вижу, как практический этот вопрос – stillstanding

+0

по какой причине? if (preg_match (...)) never_perform_this(); ?? –

+0

+1 потому что это самый смешной вопрос, который я когда-либо видел в SO – fabrik

ответ

6

Есть много способов сделать это:

  • /(?=a)b/

Это не совпадает, потому что он ищет символ, который является одновременно и б.

  • /\Zx\A/

Это не совпадает, потому что конец строки не может прийти до начала строки.

  • /x\by/

Это не совпадает, так как граница слова не может быть между символами x и y.

+0

Мне нравится '$ ^' много. –

+1

@Pekka: В PHP необходимо иметь символ между $ и ^, иначе он соответствует пустой строке, например '$ x ^'. –

6

Я не знаю, почему вы хотите это сделать, но это будет сделать это:

(?!x)x 

Первый бит (?! .. ) является отрицательным опережением, который говорит, что «убедитесь, что эта позиция не соответствует содержанию этого опережающему просмотра», где содержимое является x, а затем окончательный x говорит «матч х «поскольку эти два являются противоположностями, выражение никогда не будет соответствовать.

Вы можете также добавить начало/конец маркеров, т.е.

^(?!x)x$ 

Вы можете поменять как x с почти ничего, до тех пор пока оба бита эквивалентны.

Есть много других способов сделать это, в основном вы просто ставите два взаимоисключающих условия рядом друг с другом для сопоставления одного и того же места, и регулярное выражение не будет соответствовать - см. Mark's answer для получения дополнительных примеров.

+0

WHT пытается сделать? – Hacker

+0

pradeep, там есть объяснение. Хотя * вы * не объяснили, почему вы этого хотите, в первую очередь, вероятно, лучшее решение. –

+0

@pradeep - @Peter рассказал вам, что он делает, что вы не понимаете? – slugster

0

Попробуйте это:

$.^ 
+1

Если включен многострочный флаг dotall, это не соответствует символу новой строки? –

+0

@Peter: нет. обратите внимание на порядок '$' и '^'. – NikiC

+0

nikic, обратите внимание на то, что я говорю! Если включен многострочный флаг, '' 'соответствует концу строки 'и'^'соответствует« началу строки ». Если флажок dotall включен, '.' соответствует новой строке. Следовательно, с многострочными + dotall флагами '$. ^' Будет соответствовать символу новой строки (\ n) в 'x \ ny'. –

Смежные вопросы