Получение содержимого из скобок

#php #regex #preg-match

#php #регулярное выражение #предварительное сопоставление

Вопрос:

С помощью preg_match как я могу получить строку между скобками

Пример: sdsdds (sdsd) sdsdsd

И я хочу, чтобы

sdsd

Ответ №1:

 preg_match('/(([^)]*))/', 'sdsdds (sdsd) sdsdsd', $matches);
echo $matches[1]; // sdsd
  

Сопоставляет символы в круглых скобках, включая пустые значения. Если вы хотите сопоставить несколько экземпляров, вы можете использовать preg_match_all .

Комментарии:

1. привет, если я хочу получить второе вхождение, а не первое, как это сделать?

Ответ №2:

 preg_match('/((.*?))/', $text, $a);
echo $a[1];
  

Комментарии:

1. Использование . и *? не очень эффективно. В этом случае [^)] намного быстрее.

2. Это намного быстрее. Я мог бы сэкономить 1 мс за 1000 preg_match() итераций. pastebin.com/9XEEHjZ3

3. Это верно, но вы могли бы назвать это «наилучшей практикой» написания как можно более эффективного регулярного выражения (и кода в целом). Большинство руководств по регулярным выражениям на самом деле специально указывают на это: используйте . как можно меньше.

4. Я бы выбрал «низко висящий фрукт» с точки зрения оптимизации производительности и выбрал читаемость там, где ее мало (как здесь).

Ответ №3:

Самый простой:

 #(([^)] ))#
  

Это не очень читаемо, потому что все ( и ) должны быть экранированы с помощью .

# Являются разделителями.

Используя preg_match :

 $str = 'sdsdds (sdsd) sdsdsd';
$iMatches = preg_match('#(([^)] ))#', $str, $aMatches);
echo $aMatches[1]; // 'sdsd'