Прежде всего, одно из возможных регулярных выражений, которое захватывает нужные вам данные, это @"(.+?)"
, которое сопоставляет любые данные в кавычках, которым предшествует @
, и захватывает данные внутри. Теперь, когда вы добавили регулярное выражение, которое вы пробовали, держу пари, что проблема в том, что ваше выражение жадное: механизм регулярных выражений пытается получить максимально возможное совпадение, поэтому возвращает все @"user name". Where are you from, @"user name"
. Добавление ?
делает выражение ленивым, поэтому оно получит более короткое совпадение.
Поскольку вас интересует содержимое внутри, я предполагаю, что вашей конечной целью является динамическая замена этих строк различными типами пользовательских данных, поэтому один из подходов будет preg_replace_callback
:
function user_data($matches) {
$key = $matches[1];
// return the user data for a $key like "user name"
}
$output = preg_replace_callback('/@"(.+?)"/', 'user_data', $input);