Из-за ограничений в моем скрипте я столкнулся с проблемой, когда мне нужно убедиться, что строка соответствует одному из двух шаблонов регулярных выражений, при этом вызывая preg_match()
только один раз.
Вот часть моего кода:
public static function get_file_host_from_link($link)
{
foreach(Filehosts::$file_hosts as $key => $val)
{
if(preg_match("#{$val["regex"]}#", $link))
{
// We have a match, return this file host information
return $key;
}
}
// We've looped through all the file hosts and it hasn't matched,
// return false
return false;
}
Теперь проблема с сопоставлением URL-адресов Fileserve.com состоит в том, что может быть два типа допустимых структур URL.Один из них:
http://www.fileserve.com/file/aHd8AHD
, а другой:
http://www.fileserve.com/file/zR8VJVM/file_name.zip
В настоящее время я могу точно соответствовать первой структуре, используя это регулярное выражение: ^http://www.fileserve.com/file/[a-zA-Z0-9]+$
, но мне также нужночтобы соответствовать другой структуре URL, используя что-то вроде этого: http://www.fileserve.com/[a-zA-Z0-9]+/[a-zA-Z0-9_-\.]+$
.Как я могу сделать это с моим существующим кодом и вызывать preg_match()
только один раз?Я думал о чем-то вроде этого:
(^http://www.fileserve.com/file/[a-zA-Z0-9]+$|http://www.fileserve.com/[a-zA-Z0-9]+/[a-zA-Z0-9_-\.]+$)
, что, насколько мне известно, означает «сопоставить первый шаблон регулярных выражений ИЛИ второй», но я понятия не имею, сработает ли это.
Спасибо!