Pode preg_match () (ou outra função regex php) coincidir com um número variável de subpadrões entre parênteses?

StackOverflow https://stackoverflow.com/questions/1294721

  •  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)

Foi útil?

Solução

preg_match_all :

$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

preg_split para dividir arquivos em expressões regulares semelhante a explodir, e, em seguida, existe preg_match_all 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top