\p{Sc}
соответствует шаблону символов валюты, нужно просто поместить его в класс инвертированного характера (или выражения в квадратных скобках в терминологии POSIX).
Использование
$re = '/(*UTF)[^[:print:]\p{Sc}]+/';
echo preg_replace($re, '', '£aA€');
См regex demo и PHP demo.
Детали:
(*UTF)
- это PCRE глагол, который делает PCRE двигатель обработать строку в виде строки Unicode, а не байт строки (обратите внимание, что мы не можем использовать /u
модификатор, поскольку он позволяет как (*UTF)
и (*UCP)
глаголы, последний делает все подшаблоны Unicode осведомленными и [^[:print:]]
начинает сопоставлять намного больше символов тогда)
[^[:print:]\p{Sc}]+
- соответствует любому 1 или более символам (из-за квантора +
), кроме:
[:print:]
- версия для печати символы
\p{Sc}
- валютные символы
Я хочу, чтобы символы валюты Я думаю, что удаляет их? – user3131345
что не то, что вы сказали в своем вопросе – Fallenhero
@ user3131345: Означает ли это, что вам нужно только 'preg_replace ('/ [^ [: print:]] + /', '', $ str)'? –