Perl регулярное выражение предположительно удаляет не ASCII символы - PullRequest
0 голосов
/ 09 января 2020

Я нашел код с регулярным выражением, в котором утверждается, что он удаляет текст любых символов, отличных от ASCII. Код написан на Perl и часть кода, которая делает это:

$sentence =~ tr/\000-\011\013-\014\016-\037\041-\055\173-\377//d;

Я хочу понять, как работает это регулярное выражение, и для этого я использовал регулярное выражение . Я обнаружил, что \000, \011, \013, \014, \016, \037, \041, \055, \173, \377 означают отдельные символы как NULL, TAB , VERTICAL TAB ... Но я до сих пор не понимаю, почему символы "-" используются в регулярном выражении. Они действительно означают «символ da sh», как показано в regexr или что-то еще? Действительно ли это регулярное выражение подходит для удаления не-ASCII символов?

1 Ответ

2 голосов
/ 09 января 2020

Это на самом деле не регулярное выражение. Da sh указывает диапазон символов, как внутри класса символов регулярных выражений [a-z].

Выражение также удаляет некоторые символы ASCII (в основном пробельные символы) и резервирует диапазон символов, которые не являются ASCII; полный диапазон ASCII будет просто \000-\177.

. Чтобы быть явным, флаг d говорит, что нужно удалить любые символы, не находящиеся между первой парой слешей. См. Далее документацию .

...