2011-12-26 2 views
2

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

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

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

ответ

6

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

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, если не было найдено ни одного совпадения.

+0

Спасибо, это было то, что мне нужно. Ну, я никогда не пользовался регулярным выражением, но, похоже, мне это нужно много в моем проекте ... Я приму его как можно скорее. –

2

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

preg_match('/"(.*?)"/', $str, $quoted_string); 
    echo "<pre>"; print_r($quoted_string); 
    //return array of all quoted words in $str 
Смежные вопросы