Si la contraseña puede tener un espacio en blanco, que es indistinguible de los espacios en blanco que hacen de delimitadores, no es posible resolverlo (si no hay más pistas, claro).
La solución es cambiar de delimitadores, con un carácter que sepamos que no se usará en ningún sitio. Por ejemplo, '|' y ';':
usuario1;password1|usuario2;password2
Si pones las contraseñas entre ciertos delimitadores, sí que puedes extraerlos. Por ejemplo, si los pones entre comillas, puedes construir una expresión regular que saque los dos:
Código PHP:
#!/usr/bin/perl
use v5.14;
my $_ = "usuario1'password'usuario2'contraseña con espacios'usuario3'otra contraseña'";
while ( /(w+)'(.+?)'/g) {
say "[$1][$2]";
}
Sale:
Código:
[usuario1][password]
[usuario2][contraseña con espacios]
[usuario3][otra contraseña]