[^\x20-\x7E]
Я видел этот шаблон, используемый для регулярного выражения, в котором целью было удалить не-ascii символов из строки. Что это значит?
[^\x20-\x7E]
Я видел этот шаблон, используемый для регулярного выражения, в котором целью было удалить не-ascii символов из строки. Что это значит?
Он говорит что-то вроде: все символы, которые не являются (^
) в диапазоне \x20-\x7E
(hex 0x20
до 0x7E
).
Согласно http://www.asciitable.com/, это символы от пробела до ~
.
Это означает соответствие любым символам, которые не печатают символы.
Печатные символы включают от a до z, от A до Z, от 0 до 9 и символы, такие как ",; $#% и т.д.
^ not
\x20 hex code for space character
- to
\x7e hex code for ~ (tilde) character
Все символы печати ascii находятся между этими двумя.
Этот оператор соответствует символам не ascii, а также символам управления ascii (непечатающим), таким как звонок, вкладка, нуль и другие.
Посмотрите
man ascii
в системе unix, чтобы увидеть, какие символы он соответствует.
В perl вы также можете записать это как
[^ -~]
или
[[:^cntrl:]]
Этот последний немного отличается, поскольку он соответствует любому неконтролируемому символу, включая расширенные ascii (например, акцентированные символы) и unicode.
Возможно, вы не захотите ограничивать себя просто ascii, поскольку в неамериканских местах часто используются допустимые символы печати за пределами этого небольшого диапазона, например. øüéåç...
Это означает "все, что не является символьным кодом в шестнадцатеричном диапазоне от 0x20 до 0x7E, то есть от 32 до 126".
Каретка (^) внутри скобок [] означает "нет", а \x20-\x7E обозначает диапазон символов ascii, где \x20 (пробел) является началом диапазона, а \x7E (~ ) это конец. Это в основном все, что не является буквой, числом или общей пунктуацией.