You want to find the nth word match instead of the first one.
Use preg_match_all( ) to pull all the matches into an array; then pick out the specific matches in which you're interested, as shown in Example 22-4.
Finding the nth match
Because the preg_match( ) function stops after it finds one match, you need to use preg_match_all( ) instead if you're looking for additional matches. The preg_match_all( ) function returns the number of full pattern matches it finds. If it finds no matches, it returns 0. If it encounters an error, such as a syntax problem in the pattern, it returns false.
The third argument to preg_match_all( ) is populated with an array holding information about the various substrings that the pattern has matched. The first element holds an array of matches of the complete pattern. For Example 22-4, this means that $matches holds the parts of $todo that match /\d\. ([^\d]+)/: 1. Get Dressed, 2. Eat Jelly, and 3. Squash every week into a day.
Subsequent elements of the $matches array hold arrays of text matched by each parenthesized subpattern. The pattern in Example 22-4 has just one subpattern ([^\d]+). So $matches is an array of strings that match that subpattern: Get Dressed, Eat Jelly, and Squash every week into a day.
If there were a second subpattern, the substrings that it matched would be in $matches, a third subpattern's matches would be in $matches, and so on.
Instead of returning an array divided into full matches and then submatches, preg_match_all( ) can return an array divided by matches, with each submatch inside. To trigger this, pass PREG_SET_ORDER in as the fourth argument. This is particularly useful when you've got multiple captured subpatterns and you want to iterate through the subpattern groups one group at a time, as shown in Example 22-4.
Grouping captured subpatterns
Example 22-4 prints:
The first action is Get Dressed The next action is Eat Jelly The last action is Squash every week into a day
With PREG_SET_ORDER, each value of $match in the foreach loop contains all the subpatterns: $match is the entire matched string, $match the bit before the =, and $match the bit after the =.
22.3.4. See Also
Documentation on preg_match_all( ) at http://www.php.net/preg-match-all.