Как найти в тексте все несоответствующие символы данному регулярному выражению
Как найти на PHP в тексте все символы, не соответствующие данному регулярному выражению
/^[a-zA-Z0-9_~!$^().-]+$|^[а-яА-ЯёЁ0-9_~!$^().-]+$/isu
Например, есть строка login41;23. Как можно получить несоответствующий символ ;?
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Вы можете использовать отрицающий (негативный) символьный класс,
if (preg_match_all('/[^\w~!$^().-]+/u', 'login;№н гин4123', $matches)) {
var_dump($matches[0]);
}
// array(2) { [0]=> string(4) ";№" [1]=> string(1) " " }
См. пример работы кода онлайн.
Обратите внимание, \w находит все буквы (и русские, и английские, и другие, так как здесь использован модификатор u), цифры и знак подчёркивания, а в отрицающем символьном классе, соответственно, находит все символы, отличные от приведённых выше.