Чтобы получить все совпадения в фигурных скобках, вы можете сопоставить от {
до }
и захватить то, что находится между ними в группе захвата.
Затем используйте explode и используйте |
в качестве разделителя.Если у вас есть несколько результатов, вы можете зациклить результаты:
$str = "My text: {Hello|Hi|Hey} John, How are you? I'm fine";
preg_match_all('~{([^}]+)}~', $str, $matches);
foreach($matches[1] as $match) {
print_r(explode('|', $match));
}
Результат
Array
(
[0] => Hello
[1] => Hi
[2] => Hey
)
Php demo
Другой вариант может быть сделатьиспользование якоря \G
:
(?:\G(?!\A)|{(?=[^{}]*?}))([^|{}]+)[|}]
Пояснение
(?:
Группа без захвата \G(?!\A)
Конецпредыдущий матч, но не в начале |
или {(?=[^{}]*?})
матч {
и утверждение, что содержит не }
, а затем }
)
Закрыть группу без захвата ([^|{}]+)
Захват в группе, соответствующей НЕ, что указано в классе символов [|}]
Совпадение с тем, что указано в классе персонажей
php demo