Почему этот reg exp всегда успешен для чисел? - PullRequest
1 голос
/ 03 августа 2010

У меня есть регулярное выражение, которое ищет специальные символы.

Когда я выполняю поиск по числам, например, 3, я всегда получаю 0, когда я ожидаю получить -1.

'3'.search(/[!\"£\$%\^&\*\(\)-_\+=\[\]\{\};:@\'#\\|<,\.>\/\?]/)

Есть идеи, почему это происходит?

1 Ответ

5 голосов
/ 03 августа 2010
\)-_

Это приводит к тому, что класс символов включает все символы от ) до _, т.е. )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_. 3 находится в одном из них.

- должен быть помещен в начало или конец, чтобы он не считался специальным символом. Кроме того, кроме \, [, ] и /, нет необходимости экранировать что-либо в классе символов.

/[-!"£$%^&*()_+=\[\]{};:@'#\\|<,.>\/?]/

(Технически [ тоже не нужно экранировать, но для согласованности я предпочитаю избегать его. Кроме того, вы могли бы сопоставить - в середине, если вы избежали его \-.)

...