Как узнать пути к файлам Windows в строке в Perl? - PullRequest
1 голос
/ 21 сентября 2010

Я занимался поиском регулярного выражения, которое, как правило, можно использовать, чтобы запретить пользователям вводить пути к файлам Windows без экранирования "\".До сих пор я нашел это выражение

[^ \\] * $

Однако, это не работает для следующего:

C: \\ Program Files \\ testing

Под ошибками я имею в виду, что эта строка не проверяется.Любая помощь будет принята с благодарностью, и да, я обязан использовать регулярные выражения.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010
^(\\\\|[^\\])*$

будет соответствовать строкам, которые содержат только экранированные \ или не-1003 * символы.(Чтобы немного повысить производительность, вы можете улучшить ее до: ^(?:\\\\|[^\\]+)*$)

В Perl:

if ($subject =~ m/^(?:\\\\|[^\\]+)*$/) {
    # Successful match
} else {
    # Match attempt failed
}

Это будет соответствовать

C:\\Program Files\\test
abcd
h983475iuh 87435v z 87tr8v74
\\\\\\\\\\

и завершится неудачей

C:\Program Files\test
\
\\\

и т. Д.

2 голосов
/ 21 сентября 2010

Если бы вы применили этот трюк ко мне как к пользователю вашего приложения, я был бы весьма раздражен.Почему бы вместо того, чтобы заставлять пользователя предоставлять данные в определенном формате, вы переформатируете данные после того, как пользователь их ввел?

Взгляните на функцию quotemeta ( perldoc -f quotemeta ), которая автоматически уберет все обратные косые черты (и другие потенциально специальные символы) для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...