Search code examples
phpregexpreg-match

matching everything between two words, while last word being matched is optional


I need to capture everything between 'one' and 'four', the 'four' being optional. We don't know what's between 'one' and 'four'. I tried matching it, but not getting the right result. What am I doing wrong?

$text = "one two three four five six seven eight nine ten";
preg_match("~one( .+)(four)?~i", $text, $match);

print_r($match);

Result:

Array ( [0] => one two three four five six seven eight nine ten [1] => two three four five six seven eight nine ten )

Need Result:

Array ( [0] => one two three four five six seven eight nine ten [1] => two three [3] => four)

PS: Yes, the 'four' needs to be optional.


Solution

  • Here you need to use alternation operator.

    one(( .+)(four).*|.*)
    

    DEMO