Ya lo he conseguido, mil gracias.
Era todo muy raro, el error no estaba en la expresión regular. Valía cualquiera de las que puse. El problema es que tenía unos ifs que detectaban todo, y había dos if seguidos en lugar de que el segundo fuese else if. Al final me quedé con esto.
Código PHP:
Ver originalvar siesweb=/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$/i.exec(cadena);
Que también detecta ftp.
saludos amigos.