$string = "Текст1 | {Вложенный1 | Вложенный2 } | Текст2";
preg_match_all('/\s?([^|\{\}]+|\s?\{.+\}\s?)\s?/', $string, $matches);
var_dump($matches[1]);
array(3) {
[0]=>
string(12) "Текст1 "
[1]=>
string(45) "{Вложенный1 | Вложенный2 } "
[2]=>
string(11) "Текст2"
}
echo basename('http://example/category/category-name1/pagename.html', '.html');