1

I really don't understand regex at all, and it hurts my head.

I've a bit of text which looks like this

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

...and I don't really understand how to extract this using PHP's preg_split, or equivalent, command.

How do I do this? And where's a good place to understand how preg works?

jamescridland
  • 714
  • 1
  • 5
  • 24
  • http://regular-expressions.info/ has one of the easier introductions. And some of the tools here http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world can help with constructing them. – mario Mar 27 '11 at 12:28

2 Answers2

4

Something like this should do the trick, to match what is between ( and ) :

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

And you'd get :

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


Basically, the pattern I used searches for :

  • An opening ( ; but as ( has a special meaning, it has to be escaped : \(
  • One or more characters that are not a closing parenthesis : [^\)]+
    • This being captured, so we can use it later : ([^\)]+)
    • And this first (and only, here) captured thing will be available as $matches[1]
  • A closing ) ; here, too, it's a special character that has to be escaped : \)
Pascal MARTIN
  • 385,748
  • 76
  • 642
  • 654
2
<?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";
}
Mo.
  • 924
  • 6
  • 8