For the first two requirements:
preg_match('/[^A-Za-z0-9\.\/\\\\]|\..*\.|\.$/', $string);
The \..*\. will match if there are more than two dots. \.$ will match if there is a dot at the end. By separating each of these portions (including your original regex) with a | it will make it so the regex will match any one of the expressions (this is called alternation).
The last requirement is a little tricky, since if I understand correctly you need this to return 1 if there is a :, unless the only colon is the second character and it is followed by a \ or /. The following regex (as a PHP string) should do that:
'/:(?!(?<=^[a-zA-Z]:)[\/\\\\])/'
Or combined with the other regex (note that we also have to add : to the first character class):
preg_match('/[^A-Za-z0-9\.\/\\\\:]|\..*\.|\.$|:(?!(?<=^[a-zA-Z]:)[\/\\\\])/', $string);
Here is the explanation for that last piece:
: # match a ':'
(?! # but fail if the following regex matches (negative lookahead)
(?<=^[a-zA-Z]:) # the ':' was the second character in the string
[\/\\\\] # the next character is a '/' or '\'
) # end lookahead