@romany4

Как правильно составить RegExp для получения символов внутри кавычек?

Есть строка
$sLine = 'b44 = "ast" , J7a = ") test" , o59 = "stP" , g8a = "ted" , j1a = "tdf (" , X64 = "(" , P24 = "ose" ';
На просторах нета нашел регулярку -

$sPattern = '~(["\'])([^"\']+)\1~';
if (preg_match_all("$sPattern", $sLine, $arMatches)) {
  d($arMatches);
}

С помощью данного кода могу получить все, что находится внутри кавычек.

Пара вопросов
1) что означает \1 в регулярном выражении? (на одном из ресурсов прочитал что это эквивалент $1, но при замене, получаю пустой $arMatches)
2) Можно ли ли улучшить регулярное выражение таким образом, чтобы получить только те строки (внутри кавычек), в которых есть одна из скобок т.е.
array() {
    [1]=>
    string(6) ") test"
    [2]=>
    string(5) "tdf ("
    [3]=>
    string(1) "("
  }
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 1
alsopub
@alsopub
1) \1 тут означает "тот же символ что всретился ранее в ["\']" то есть \1 это или двойная или одинарная кавычка в зависимости от того, что встретилось вначале.
2) Что-то типа $sPattern = '~(["\'])([^"\']*[\(\)][^"\']*)\1~';
3) Факультативное задание. А если в строке будет что-то типа b44 = "a\"s\"t"...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы