Jump to content

Help with preg_match_all('!/search/(.*)/([0-9])!i', $page, $pages);


Recommended Posts

hey guys this should be a simple one but im struggling, i have the regex :-

 

preg_match_all('!/search/(.*)/([0-9])!i', $page, $pages);

 

and that works for the numbers between 1-9 but how would i change ([0-9]) to match any number?

 

Thanks in advance

Regular expressions have "modifiers" that alter the number of items a specific block can match.  Putting a plus after something means "one or more times."  So if you did [0-9]+ that would match any number of characters.

 

Regular expressions also have built in character classes.  \d means "any digit," so you can replace [0-9]+ with \d+ and get the same results, plus many people think it's more readable.

 

-Dan

Ok new problem its outputting:

 

Array ( [0] => Array ( [0] => href="/search/reg/2/">2 3 4 5 ... 32 Array ( [0] => reg/2/">2 3 4 5 ... 32< ) [2] => Array ( [0] => d ) )

 

The thing is i want /search/reg/number/  to appear in different array places so /search/reg/3/ would be in array value 1 and /search/reg/4/ would be in value 2

The parentheses determine the "capture group."  $matches[0] will be the whole pattern.  $matches[1] will be the first set of parens, $matches[2] will be the second set, etc.

 

What you've posted is too poorly formatted for me to tell what exactly is going on.  Use [ code ] tags around your output so we can see it better.

 

-Dan

This isn't valid output from a print_r statement, there appears to be a great amount of this array missing.

 

Are you using preg_match or preg_match_all?  If you're using preg_match_all then your result will be an array of arrays of matches like I described.

 

Show some more code so we can tell exactly what's up here.  Maybe a little sample app

\d, not d.  Also, your .* is far too greedy, you want something like this:

 function page($page)
{
preg_match_all('!href="/search/(.*?)/(\d+)!i', $page, $pages);
print_r ($pages); 

Once successfully matched, you'll need to loop through $pages to get arrays of matches:

foreach ( $pages as $match ) 
{  
   echo "{$match[1]} .. {$match[2]}<br />\n";
}

-Dan

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.