Извлечь все, что в скобках, используя регулярные выражения - PullRequest
1 голос
/ 27 марта 2011

Я действительно не понимаю регулярных выражений, и это болит у меня в голове.

У меня есть немного текста, который выглядит так

blah blah blah (here is the bit I'd like to extract)

... и я не совсем понимаю, как извлечь это с помощью PHP preg_split или эквивалентной команды.

Как мне это сделать? А где хорошее место, чтобы понять, как работает preg?

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

Примерно так должно получиться, чтобы соответствовать тому, что находится между ( и ):

$str = "blah blah blah (here is the bit I'd like to extract)";
if (preg_match('/\(([^\)]+)\)/', $str, $matches)) {
    var_dump($matches[1]);
}

И вы получите:

string 'here is the bit I'd like to extract' (length=35)


В основном, шаблон, который я использовал, ищет:

  • Открытие (;но, поскольку (имеет особое значение, его необходимо экранировать: \(
  • Один или несколько символов, которые не являются закрывающей скобкой: [^\)]+
    • Это фиксируется, поэтому мы можемиспользуйте его позже: ([^\)]+)
    • И эта первая (и только здесь) захваченная вещь будет доступна как $matches[1]
  • Aзакрытие ), здесь также необходимо использовать специальный символ: \)
2 голосов
/ 27 марта 2011
<?php

$text = "blah blah blah (here is the bit I'd like to extract)";
$matches = array();
if(preg_match('!\(([^)]+)!', $text, $matches))
{
    echo "Text in brackets is: " . $matches[1] . "\n";
}
...