在括号和单词PHP之间获取

时间:2017-01-16 23:18:27

标签: php regex

我试图从多个字符串中提取特定值。假设我有以下字符串:

/a-url/{some_hash}/
/user/{user_hash}/
/user-overview/{date_hash}/{user_hash}

我想在大括号open和_hash}之间提取所有内容,我该如何实现呢?

输出应该是一个数组:

    $array = [
        'some_hash', 
        'user_hash',
        'date_hash',
        'user_hash'
    ];

当前代码:

 $matches = [];
        foreach (\Route::getRoutes()->getRoutes() as $route) {
            $url = $route->getUri();
            preg_match_all('/({.*?_hash})/', $url, $matches);
        }

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

$s = '/a-url/{some_hash}/
/user/{user_hash}/
/user-overview/{date_hash}/{user_hash}';

preg_match_all('/{(.*?_hash)}/', $s, $m);
var_dump($m[1]);

输出将是:

array(4) {
  [0]=>
  string(9) "some_hash"
  [1]=>
  string(9) "user_hash"
  [2]=>
  string(9) "date_hash"
  [3]=>
  string(9) "user_hash"
}

根据您的编辑,您可能需要:

$all_matches = [];
foreach (\Route::getRoutes()->getRoutes() as $route) {
    $url = $route->getUri();
    preg_match_all('/{(.*?_hash)}/', $url, $matches);
    $all_matches = array_merge($all_matches, $matches[1]);
}
var_dump($all_matches);