tags:

views:

24

answers:

1
$variable = 'of course it is unnecessary [http://google.com], 
but it is simple["very simple"], and this simple question clearly
needs a simple, understandable answer [(where is it?)] in plain English'

Value of this variable everytime changes.

What I trying to do is to get the text from [...]. So, if there is [(google)], the match should be (google).

I'm searching for a solution, which can do each of these actions:

  1. get all matches of [...], write into $all
  2. get only the first match, write into $first
  3. get only the last match, write into $last
  4. remove all matches of [...] from the variable (erase)
  5. remove only first match
  6. remove only last match

Tried different regex for this, like /[\(.*?\)]/, but the results aren't what one might expect.

Thanks for your attention, any help would be appreciated.

+2  A: 

This should do it:

$variable = 'of course it is unnecessary [http://google.com], 
but it is simple["very simple"], and this simple question clearly
needs a simple, understandable answer [(where is it?)] in plain English';

preg_match_all("/(\[(.*?)\])/", $variable, $matches);

$first = reset($matches[2]);
$last = end($matches[2]);
$all = $matches[2];

# To remove all matches
foreach($matches[1] as $key => $value) {
    $variable = str_replace($value, '', $variable);
}

# To remove first match
$variable = str_replace($first, '', $variable);

# To remove last match
$variable = str_replace($last, '', $variable);

Note that if you use str_replace to replace the tags, all similar occurences of the tags will be removed if such exist, not just the first.

Tatu Ulmanen
there should be a way to remove all, first or only the last match
Happy
**$first** is **[(where is it?)]** it should be a **(where is it?)** (remove [ and ])
Happy
@Happy, that's fixed, had the wrong key.
Tatu Ulmanen
@Tatu Ulmanen, now it works perfectly, thanks for the right solution.
Happy