Получить текст в кавычках - PullRequest
2 голосов
/ 26 декабря 2011

есть ли какая-нибудь функция, которая может взять только текст внутри кавычек из переменной?
Прямо как:

$text = 'I am "pro"';
echo just_text_in_quotes($text);

Я знаю, что эта функция не существует ... но мне нужно что-то подобное. Я думал о fnmatch("*",$text) Но это не эхо, просто этот текст, это просто для проверки. Не могли бы вы мне помочь? Спасибо.

Ответы [ 3 ]

8 голосов
/ 26 декабря 2011

Эта функция будет возвращать первый соответствующий текст между кавычками (возможно, пустой строкой).

function just_text_in_quotes($str) {
   preg_match('/"(.*?)"/', $str, $matches);
   return isset($matches[1]) ? $matches[1] : FALSE;
}

Вы можете изменить его, чтобы он возвращал массив всех совпадений, но в своем примере вы используете его вконтекст echo возвращает его возвращаемое значение.Если бы он возвратил массив, все, что вы получили бы, это Array.

Возможно, вам лучше написать более общую функцию, которая может обрабатывать несколько вхождений, и собственный разделитель.

function get_delimited($str, $delimiter='"') {
    $escapedDelimiter = preg_quote($delimiter, '/');
    if (preg_match_all('/' . $escapedDelimiter . '(.*?)' . $escapedDelimiter . '/s', $str, $matches)) {
        return $matches[1];
    }
}

Это вернет null, если совпадений не найдено.

3 голосов
/ 26 декабря 2011

preg_match сделано для этого

   preg_match('/"(.*?)"/', $str, $quoted_string);
   echo "<pre>"; print_r($quoted_string);
   //return array of all quoted words in $str
1 голос
/ 26 декабря 2011

Это регулярное выражение:

"(\w*)"

поможет вам, как вы видите здесь: http://rubular.com/r/3kgH7NdtLm

...