Bikash Ranjan Nayak
Bikash Ranjan Nayak

Reputation: 13

Retrieving text outside square brackets in PHP

I need some way of capturing the text outside square brackets. So for example, the following string:

       My [ground]name[test]Jhon[random]petor [shorts].

I m using the below preg match expression but the result could not be expected

    preg_match_all("/\[[^\]]*\]/", $text, $matches);

it giving me the result which is within the square bracket.

    Result : 
     Array ( 
            [0] => [ground] 
            [1] => [test] 
            [2] => [random] 
            [3] => [shorts] 
        )

Expect Output:

       Array ( 
            [0] => [My] 
            [1] => [name] 
            [2] => [Jhon] 
            [3] => [petor] 
        )

Any help that would be great

Upvotes: 0

Views: 276

Answers (1)

The fourth bird
The fourth bird

Reputation: 163632

You can extend the pattern adding \K to clean what is matched so far and then using an alternation to match 1 or more word characters.

\[[^][]+]\K|\w+

See a regex demo

$re = '/\[[^][]+]\K|\w+/';
$str = 'My [ground]name[test]Jhon[random]petor [shorts].';

preg_match_all($re, $str, $matches);
print_r(array_values(array_filter($matches[0])));

Output

Array
(
    [0] => My
    [1] => name
    [2] => Jhon
    [3] => petor
)

Upvotes: 1

Related Questions