Как подсчитать все специальные символы в строке? пример:
$sample_string = "!!~~Sample string";
echo substr($sample_string, special character);
поэтому выход будет 4.
Вы можете просто использовать функцию preg_replace_callback
вместе с closure
например, как
$sample_string = "!!~~Sample string";
$count = 0;
preg_replace_callback('/[^\h\w]/', function($m)use(&$count) {
$count++;
}, $sample_string);
echo $count;//4
substr_count()
не работает с регулярными выражениями, поэтому вам нужно будет выполнить substr_count()
для каждого символа, который вы хотите удалить.
$str = preg_replace('/[^ a-z0-9]+/i', '', $sample_string);
$number_of_sprecial_chars = strlen($sample_string)-strlen($str);
капли всех специальных символов в строке, а затем дает вам разницу между оригинальной и измененной версией.
Если специальные символы появляются исключительно в начале (или вы хотите только те, которые нужно заменить),
echo preg_replace('/^[^ a-z0-9]+/', '', $sample_string);
даст вам непосредственно строку без специальных символов в начале (без использования substr()
).
$ pattern = '/[! @# $% ^ & *()]/'//будет соответствовать одному вхождению любого символа внутри []
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
Выполните глобальное сопоставление регулярных выражений со строкой. Ищет предмет для всех совпадений с регулярным выражением, заданным в шаблоне, и помещает их в совпадения в порядке, указанном флажками.
После того, как будет найдено первое совпадение, последующие поиски продолжаются с конца последнего совпадения.
По Regex
$sample_string = "!!~~Sample string";
preg_match_all("/\W/",$sample_string,$match);
echo count($match);