Thank you Todd, I also want to capture when I don't have the www in the beginning of the URL. For instance, try to execute your code with $orig = 'http://zshare.net/video/541070871c7a8d9c<http://www.zshare.net/video/541070871c7a8d9c> '; That's why I used (www\.|), but I'm not a regex expert and I'm sure there a way better solutions to this problem. On Fri, Mar 6, 2009 at 11:53 PM, haliphax <haliphax@xxxxxxxxx> wrote: > On Fri, Mar 6, 2009 at 3:44 PM, Nitsan Bin-Nun <nitsan@xxxxxxxxxxxx> > wrote: > > I'm not looking for other ideas, the main thing here is that I have about > > 30-100 regex's in the database and the script fetches them and applies > them > > to the string. I can't build again the engine and I'm not going to do > that. > > I'm trying to solve my problem ;) If you have any ideas regarding my > issue > > and not going in another way this would be very appreciated. > > Nitsan, > > I think it's because you're referencing the capture group with index > instead of index 2. Also, I don't understand why you have the pipe > ("|") character in your regex string... is that part of your engine? > > This code: > > $orig = 'http://www.zshare.net/video/541070871c7a8d9c'; > $matches = array(); > preg_match('#http://(www\.)zshare\.net/video/([^/]+)#', $orig, $matches); > echo $matches[2]; > > Grabs the correct match: > > 541070871c7a8d9c > > The regex pattern works with the pipe char, but it is unnecessary and > may lead to some strange behavior. > > Hope this helps, > > > -- > // Todd >