Здравствуйте, Аноним, Вы писали:
А>помогите составить регулярное выражение.
А>Такие вот УРЛ валидные:
А>http://www.break.com/index/candy-fireworks-by-pes.html
А>http://www.break.com/index/hot-girl-pulls-off-insane-golf-trick-shot.html
А>http://www.break.com/usercontent/2009/7/rhythm-heaven-802807.html
А>http://www.break.com/tv-shows/the-office/identity-theft-814582.html
А>http://www.break.com/cute-girls/hot-model-minamo-kusano.html
А>такие нет:
А>http://www.break.com/
А>http://media1.break.com/RealTime/whatsnew/whatsnew1.html
А>http://media1.break.com/RealTime/mostviewed/daily/mostviewed1.html
А>http://www.break.com/channels.html
А>http://www.break.com/pictures/pictures.html
А>http://www.break.com/games/games.html
А>т.е. можно по следующему слову после первого / определить валидный или нет.
А>пробую так:
А>(?:[Bb][Rr][Ee][Aa][Kk]\.[Cc][Oo][Mm]/)(\w[\w|-]*^(pictures)[^games])
А>не работает. Т.е. как пойти по способу исключения или разрешения (разрешение лучше)?
А>спасибо
способ разрешения:
(?i)^
http://www.break.com/(index|usercontent|tv-shows|cute-girls)/.+
способ исключения:
(?i)^
http://www.break.com/(?!RealTime|channels|pictures|games).+/.+
в целом неравенство определяется быстрее. Так что если больше ожидаем правильных линков то лучше способ исключения, иначе способ разрешения. Однако есть и фактор количества вариантов. Если разрешенных намного больше исключенных то лучше исключать.
А еще в C# есть такая штука: RegexOptions
Regex.IsMatch(urlStr, regExpPattern, RegexOptions.IgnoreCase);
Это вместо того чтоб писать "(?i)" как в моём примере.