Как получить текст без слов (проблема с амперсандом) - PullRequest
0 голосов
/ 26 июля 2011

У меня есть такая строка: Hello @ "username". Откуда вы, @ "имя пользователя"? Мне нужно получить строку между «утверждениями (имя пользователя), но я не знаю, как это сделать.

Я пробовал что-то подобное /@("(.*)"|(.[^ ]*))\s*/, но оно работает неправильно

Ответы [ 4 ]

1 голос
/ 26 июля 2011

Прежде всего, одно из возможных регулярных выражений, которое захватывает нужные вам данные, это @"(.+?)", которое сопоставляет любые данные в кавычках, которым предшествует @, и захватывает данные внутри. Теперь, когда вы добавили регулярное выражение, которое вы пробовали, держу пари, что проблема в том, что ваше выражение жадное: механизм регулярных выражений пытается получить максимально возможное совпадение, поэтому возвращает все @"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);
0 голосов
/ 26 июля 2011

Попробуйте, если это не работает, просто убегите "по шаблону

/\@\&quote\;([\w\s]{0,})\&quote\;/
0 голосов
/ 26 июля 2011

Если есть только один @"..." на строку, что-то вроде этого должно работать

$matches = array();
preg_match("/@\"(.+?)\"/i", $inputstring, $matches);

echo($matches[1]);
0 голосов
/ 26 июля 2011

попробуйте посмотреть на это: http://www.php.net/manual/en/function.strstr.php вам может понадобиться взорвать пробел после и получить первый элемент из массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...