2014-10-22 3 views
0

Итак, я немного оглядываюсь, но у меня проблемы.preg_match вот это, но не соответствует ни одному из этих

Мне нужна функция preg_match с регулярным выражением, которое находило слова в строке, чтобы соответствовать всему шаблону, не заменять или находить позицию.

"mct" or "MT" /i (не чувствительно к регистру)

, но в то же время, эта строка не должна иметь ни одного слова отправную или содержащий «MD», «мед», «гореть», «Малл», «де-А» , «горячая ТЭМ»/я (также не чувствительны к регистру)

не чувствительна к регистру на всех ...

поэтому я попытался коснуться, как это:

/(mt|mct)(?!med)(?!md)(?!burn)(?!mull)(?!des a)(?!hot tem)))*$/i 

, но, похоже, не работает так, как Я ожидал.

Пример ожидаемого поведения:

$string      |STATUS 

McTNug10GdPap    | TRUE 
McTQQMdDobPap    | FALSE (has "Md") 
McT Pollo Esp Dobl Gd P  | TRUE 
MTD McPollo Spicy Med  | FALSE (has "Med") 
MegaBig Chikn Nugg   | FALSE 
+0

Можете ли вы дать нам пример строки? –

+0

добавил, спасибо –

+0

В вопросе, который он говорит, должен содержать 'mct' или' MT', но в регулярном выражении есть '(mc | mct)', и поэтому я могу обновить свой ответ соответственно? – hwnd

ответ

1

Вы можете использовать следующее регулярное выражение на основе от требований.

/^(?!.*(?:me?d|burn|mull|des a|hot tem)).*mc?t.*$/i 

Live Demo

+0

Это ищет совпадение для «mct», но не «mt»? –

+0

Вот почему я спросил в комментариях, обновил .. – hwnd

+0

https://eval.in/209004 – hwnd

0

Изменить матч двух моделей

if(preg_match("/(mc|mct)/",$string) && 
!preg_match("/(md|burn|mull|des a|hot tem)/",$string)) 
+0

пытается с этим, спасибо –

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