2015-01-25 2 views
0

Проблемы: -Поиск специальных Charaters в строке

Я использую регулярное выражение для поиска специальных символов в строке

/^((?!^[a-zA-Z0-9\s]+$).)*$/ 

Но я не знаю, как получить все специальные символы из строки.

Как preg_match_all($pattern,'adcbasjkd*ACas!',$match)

дает

array 
(
    0 => 'adcbasjkd*ACas!' 
    1 => '!' 
) 

Как вы видите, я не получаю * подарок в adcbasjkd*ACas! как результат.

Вопрос: -

Так как я могу получить все символы, которые соответствуют шаблону?

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

+0

Что такое "специальные символы"? Они кусаются или как-то ведут себя особенными? – arkascha

+0

@arkascha может быть для меня !! –

+0

:-) Наверное, вы имеете в виду «символы не-ascii». Или «не-7-битные символы». Нет никакого различия между «нормальными» и «специальными» персонажами. Персонаж - персонаж. И все они имеют характер. :-) – arkascha

ответ

1
[^a-zA-Z0-9\s] 

Вы можете напрямую использовать это. См. Демонстрационную версию.

https://www.regex101.com/r/rG7gX4/26

$re = "/[^a-zA-Z0-9\\s]/mi"; 
$str = "adcbasjkd*ACas!"; 

preg_match_all($re, $str, $matches); 

Это регулярное выражение говорит, что захват все, что принадлежит к классу класса available.Character символов отрицается так ничего не внутри он будет захвачен. Глобальный флаг по умолчанию включен. Поэтому он будет соответствовать всем таким символам.

+1

Если возможно, вы можете сказать мне, что делает это регулярное выражение? –

2

С инвертированным класса

$pattern = '/[^a-z\d]/i'; 
preg_match_all($pattern,'adcbasjkd*ACas!',$match); 

регулярное выражение [^a-z\d] с IgnoreCase флагом захватывает все, что это не буквы и цифры.

+0

Это также рассмотрит числа как специальные символы. Разве это не так? –

+0

@Letmesee Хорошо. Теперь он не будет рассматривать числа как специальные символы. –

+0

Можете ли вы объяснить регулярное выражение? –

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