Should i Use regexp or string functions

Hi experts!

Please tell me which one is going to be quicker to find and get from string couple of characters.

I want to search through a long string to find match for a youtube id, I don't know where it is going to be. I know the pattern that will occur - youtube.com/v/videoid&...

How do i accomplish this?
What is the fastest way as far as performance is considered?

Many thanks!
vidda22Asked:
Who is Participating?
 
Beverley PortlockConnect With a Mentor Commented:
If you don't know where a substring would turn up in a string (or how many times) then that is a job for a regex, so in your example I would use a preg_match_all and a pattern like '#youtube\.com/v/([^&]+)&amp#s'

UNTESTED

$mystring = ..... string containing what you want to search
preg_match_all( '#youtube\.com/v/([^&]+)&amp#s', $mysting, $matches );
print_r( $matches );

I'm assuming that 'videoId' is where you expect to find the video ID
0
 
Beverley PortlockCommented:
Quick answer: substr is ALWAYS faster

but....

If a pattern is always fixed then using substr will be faster than a regex, but if a pattern is variable then using a regex will be a lot less error prone than messing about with substr.

You should not be worrying about "which one is going to be quicker" because the difference in execution time is tiny - a fraction of a millisecond. Worry about using the right tool for the job instead.

In terms of speed, your MySQL database will have a bigger impact than substr/regex and your customer's ADSL line will have the biggest impact of all because it is usually the slowest component in the whole chain.
0
 
vidda22Author Commented:
Ok. Thanks bportlock!

Obviously I don't know the videoid.

Could you please tell me how would I take the id using substr?
having this pattern:

.....youtube.com/v/videoid&...


Would substring help me to get couple of these if there were more of them in a string?

If not what code should i use as far as regexp is considered?
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Ray PaseurCommented:
Please post a sample of your test data.  We can help you isolate the information you need.  You may want to use preg_match_all()
http://php.net/manual/en/function.preg-match-all.php

I agree with Brian's characterization that substr() is faster than REGEX.  At the same time, I expect that speed does not matter here.  The CPU is about 100,000 times faster than the disk drives (give or take a few orders of magnitude) so optimizing any purely-CPU operation like string manipulation is milking a mouse.  A lot of effort for very little result.  If you have a performance problem it will always be in the I/O subsystem.  In web sites that means the data base.
0
 
Beverley PortlockCommented:
0
 
vidda22Author Commented:
Thanks!
0
 
vidda22Author Commented:
I used this:

$videoText = '"<http://www.youtube.com/v/YLwZwheyeEc&setting=1>"';

if((bool)preg_match_all( '#youtube\.com/v/([^&]+)&amp#s',$videoText,$matches)){//w{3}\.youtube\.com\/v\/([A-Za-z0-9]{9,12})>$
            print_r($matches);
      }

And result is
Array ( [0] => Array ( [0] => youtube.com/v/YLwZwheyeEc& ) [1] => Array ( [0] => YLwZwheyeEc ) )

I don't want anything else than videoid how do i do that??
so i want to get rid of matches like [0]
0
 
vidda22Author Commented:
I used this code sorry

$videoText = '"<http://www.youtube.com/v/YLwZwheyeEc&setting=1>"';

if((bool)preg_match_all( '#youtube\.com/v/([^&]+)&amp#s',$videoText,$matches)){
            print_r($matches);
      }
0
 
Beverley PortlockCommented:
"so i want to get rid of matches like [0]"

$matches[0] is always present, just ignore it. The results are always in $matches[1] onwards depending on the preg options you select
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.