Solved

Should i Use regexp or string functions

Posted on 2011-02-23
9
378 Views
Last Modified: 2012-05-11
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!
0
Comment
Question by:vidda22
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
9 Comments
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 34962203
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
 

Author Comment

by:vidda22
ID: 34962291
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
 
LVL 34

Accepted Solution

by:
Beverley Portlock earned 500 total points
ID: 34962367
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
PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

 
LVL 110

Expert Comment

by:Ray Paseur
ID: 34962374
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
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 34962377
0
 

Author Comment

by:vidda22
ID: 34962405
Thanks!
0
 

Author Comment

by:vidda22
ID: 34962505
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
 

Author Comment

by:vidda22
ID: 34962520
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
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 34962814
"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

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question