Alvaro
Alvaro

Reputation: 41595

Regex PHP only gets the first match

I have an string which looks like:

aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'

I would like to get all the matches separate by ' but not the ones escaped with ?'

I managed to do it by using this expression:

(.*?)[^\\?]'

And I tested it on regexpal and seems to work properly.

When trying to apply it to my PHP code by using preg_match I only get the first match.

This is my code:

preg_match ("/(.*?)[^\\?]'/i", $content, $matches);
print_r($matches);

And the result is:

Array
(
    [0] => aaaaaaaaaaaaaaaa'
    [1] => aaaaaaaaaaaaaaa
)

I'm expecting to get bbbbbbbb?'cccccccccccc' and ddddddddd' as well. What am I doing wrong? Thanks.

Upvotes: 2

Views: 166

Answers (3)

Rahul K
Rahul K

Reputation: 413

Simply You can try this

$s = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
$arr = preg_split("/[^?]'/", $s, -1, PREG_SPLIT_NO_EMPTY);

Out Put Array

Array
(
    [0] => aaaaaaa
    [1] => bbbbbbbb?'ccccccccccc
    [2] => dddddddd
)

Upvotes: 0

Volkan Ulukut
Volkan Ulukut

Reputation: 4218

use preg_match_all() to get all matches instead of one

$content = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
preg_match_all("/(.*?)[^\\?]'/i", $content, $matches);
print_r($matches);

result

Array ( 
        [0] =>
                Array ( 
                        [0] => aaaaaaaa' 
                        [1] => bbbbbbbb?'cccccccccccc' 
                        [2] => ddddddddd' 
                        ) 
        [1] => 
                Array ( 
                        [0] => aaaaaaa 
                        [1] => bbbbbbbb?'ccccccccccc 
                        [2] => dddddddd 
                        ) 
    )
                        

Upvotes: 1

anubhava
anubhava

Reputation: 785128

You can use this negative lookbehind regex in preg_match_all:

$s = "aaaaaaaa'bbbbbbbb?'cccccccccccc'ddddddddd'";
if (preg_match_all("/(.*?)(?<!\?)'/", $s , $m ))
    print_r($m[1]);

OR using preg_split:

$arr = preg_split("/(?<!\?)'/", $s, -1, PREG_SPLIT_NO_EMPTY);

OUTPUT

Array
(
    [0] => aaaaaaaa
    [1] => bbbbbbbb?'cccccccccccc
    [2] => ddddddddd
)

Upvotes: 3

Related Questions