Perl регулярное выражение: числа и X - PullRequest
2 голосов
/ 04 мая 2011

Как очистить строку всего, кроме цифр и буквы x (если она существует) с регулярным выражением в Perl?

2x4 works
x3405 does not work
2 works

Пытаетесь получить ответ с самым высоким рейтингом, но я понятия не имею.

Это насколько я могу получить, не облажаясь:

$string =~ s/[\D]//gi;

Или я иду в неправильном направлении?

Комплексное выражение для телефонапроверка номера

Ответы [ 4 ]

7 голосов
/ 04 мая 2011

Оператор tr может использоваться для удаления символов:

$string =~ tr/0-9x//cd;

, где флаг c обозначает «соответствовать противоположному», а флаг d означает «удалять».

Примечание: оператор транслитерации также доступен как y///, но также имеет псевдоним tr после утилиты командной строки UNIX, которая выполняет аналогичную работу.

5 голосов
/ 04 мая 2011

Используйте оператор транслитерации:

$string =~ y/0-9x//cd;

Обратите внимание, что в этом прекрасном новом мире юникода \ D и \ d означают больше, чем просто 0-9, и 0-9, вероятно, то, что здесь нужно.

2 голосов
/ 04 мая 2011

Вы обеспокоены тем, что люди могут использовать «записанные числа»? (например, 1-800-ЦВЕТЫ переводятся как 1-800-356-9377). И если это возможно, как вы различаете «X» (9) или «x» (расширение)? Я не уверен, каков ваш контекст, но вы можете не только молча отбрасывать буквенные символы, но и выдавать предупреждение о том, что номера телефонов на основе букв запрещены.

Помимо этой сложности, есть несколько модулей CPAN, которые могут оказаться полезными вместо того, чтобы проверять свой собственный валидатор телефонных номеров:

1 голос
/ 04 мая 2011

Вы можете использовать следующий код:

$string =~ s/[^\dx]//gi;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...