Pode preg_match () (ou outra função regex php) coincidir com um número variável de subpadrões entre parênteses?
-
18-09-2019 - |
Pergunta
Suponha que eu tenho '/srv/www/site.com/htdocs/system/application/views/'
e quer testá-lo contra uma expressão regular que corresponde cada nome de diretório no caminho?
Algo como este padrão: '(/[^/])'
Isso produz uma matriz com 'srv','www','site.com'...
etc.
PS:. A sintaxe regexp que eu escrevi é apenas para ilustrar, não é testado e certamente errado, mas apenas para dar uma idéia
PS2:. Eu sei que há explode()
mas vamos ver se podemos fazer isso com uma expressão regular (é útil para outras linguagens e frameworks que não têm explodir)
Solução
$str = '/srv/www/site.com/htdocs/system/application/views/';
preg_match_all('/\/([^\/]+)/', $str, $matches);
// $matches[0] contains matching strings
// $matches[1] contains first subgroup matches
print_r($matches[1]);
Output:
Array
(
[0] => srv
[1] => www
[2] => site.com
[3] => htdocs
[4] => system
[5] => application
[6] => views
)
Outras dicas
Há preg_split
para dividir arquivos em expressões regulares semelhante a explodir, e, em seguida, existe preg_match_al
l quais faz o que quiser.
Eu não acho que você pode, mas você poderia passar a usar preg_match_all () para obter várias correspondências de uma expressão regular. Há também preg_split () que pode ser mais apropriado.