Может ли preg_match() (или другая функция регулярных выражений php) соответствовать переменному количеству заключенных в скобки подшаблонов?

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть '/srv/www/site.com/htdocs/system/application/views/' и хотите протестировать его с регулярным выражением, которое соответствует каждому имени каталога в пути?

Что - то нравится этот шаблон: '(/[^/])'
Это дает массив с 'srv','www','site.com'... и т.д.

PS:синтаксис регулярных выражений, который я написал, предназначен просто для иллюстрации, он не проверен и наверняка ошибочен, а просто для того, чтобы дать представление.

PS2:Я знаю, что есть explode() но давайте посмотрим, сможем ли мы сделать это с помощью регулярного выражения (это полезно для других языков и фреймворков, в которых нет explode).

Это было полезно?

Решение

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]);

Выходной сигнал:

Array
(
    [0] => srv
    [1] => www
    [2] => site.com
    [3] => htdocs
    [4] => system
    [5] => application
    [6] => views
)

Другие советы

Есть preg_split для разделения файлов по регулярным выражениям, подобным explode, а затем есть preg_match_all который делает то, что вы хотите.

Я не думаю, что вы можете, но вы могли бы вместо этого использовать preg_match_all() предварительный совпадение_all() чтобы получить несколько совпадений из регулярного выражения.Существует также preg_split() прег_сплит() что может быть более уместно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top