#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/9XEEHjZ33. Это верно, но вы могли бы назвать это «наилучшей практикой» написания как можно более эффективного регулярного выражения (и кода в целом). Большинство руководств по регулярным выражениям на самом деле специально указывают на это: используйте
.
как можно меньше.4. Я бы выбрал «низко висящий фрукт» с точки зрения оптимизации производительности и выбрал читаемость там, где ее мало (как здесь).
Ответ №3:
Самый простой:
#(([^)] ))#
Это не очень читаемо, потому что все (
и )
должны быть экранированы с помощью
.
#
Являются разделителями.
Используя preg_match
:
$str = 'sdsdds (sdsd) sdsdsd';
$iMatches = preg_match('#(([^)] ))#', $str, $aMatches);
echo $aMatches[1]; // 'sdsd'