PHP Regex preg_match показывает необычное поведение - PullRequest
0 голосов
/ 09 сентября 2011

Вот пример:

$urlpattern = '%[^http://][^https://][\w]+(-[\w]+)*(\.[\w]+(-[\w]+)*)*\.[\w]{1,6}(\.[\w]{1,6})*[^/]%';

Я столкнулся со странной ошибкой, которая поражает меня.

Когда я ищу строку, такую ​​как 'power-tool-world.com', она подсвечивает ее и возвращает 'ower-tool-world.com' (удаляет p), но когда я использую любое другое письмо (не проверяется на КАЖДОМ другом письме), оно работает нормально, поэтому 'cower-tool-world.com' возвращает 'cower-tool-world.com' Может кто-нибудь, пожалуйста, помогите мне понять, почему, но что более важно, дайте мне решение, которое нене вызывает эту проблему?

1 Ответ

2 голосов
/ 09 сентября 2011

Ошибка в первой части. Когда вы используете квадратные скобки, вы соответствуете одному из символов внутри них, поэтому [http://] соответствует h, t, p,: и /, и эти символы будут исключены из следующей соответствующей группы. Вы должны использовать ^(http://|https://)? вместо.

...