Link to home
Start Free TrialLog in
Avatar of vidda22
vidda22Flag for United Kingdom of Great Britain and Northern Ireland

asked on

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!
Avatar of Beverley Portlock
Beverley Portlock
Flag of United Kingdom of Great Britain and Northern Ireland image

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.
Avatar of vidda22

ASKER

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?
ASKER CERTIFIED SOLUTION
Avatar of Beverley Portlock
Beverley Portlock
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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.
Avatar of vidda22

ASKER

Thanks!
Avatar of vidda22

ASKER

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]
Avatar of vidda22

ASKER

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);
      }
"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