Solved

Should i Use regexp or string functions

Posted on 2011-02-23
9
372 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
  • 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
 
LVL 108

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
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
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&amp;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&amp;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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

This article will explain how to display the first page of your Microsoft Word documents (e.g. .doc, .docx, etc...) as images in a web page programatically. I have scoured the web on a way to do this unsuccessfully. The goal is to produce something …
These days socially coordinated efforts have turned into a critical requirement for enterprises.
The viewer will learn how to dynamically set the form action using jQuery.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

743 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now