Regular expressions are a very useful tool for developers. They allow to find, identify or replace text, words or any kind of characters. In this article, I have compiled 15+ extremely useful regular expressions that any web developer should have in his toolkit.

Getting started with regular expressions

For many beginners, regular expressions seems to be hard to learn and use. In fact, they’re far less hard than you may think. Before we dive deep inside regexp with useful and reusable codes, let’s quickly see the basics:

Regular expressions syntax

Regular ExpressionWill match…
fooThe string “foo”
^foo“foo” at the start of a string
foo$“foo” at the end of a string
^foo$“foo” when it is alone on a string
[abc]a, b, or c
[a-z]Any lowercase letter
[^A-Z]Any character that is not a uppercase letter
(gif|jpg)Matches either “gif” or “jpeg”
[a-z]+One or more lowercase letters
[0-9.-]Аny number, dot, or minus sign
^[a-zA-Z0-9_]{1,}$Any word of at least one letter, number or _
([wx])([yz])wy, wz, xy, or xz
[^A-Za-z0-9]Any symbol (not a number or a letter)
([A-Z]{3}|[0-9]{4})Matches three letters or four numbers

 

PHP regular expression functions

FunctionDescription
preg_match() The preg_match() function searches string for pattern, returning true if pattern exists, and false otherwise.
preg_match_all() The preg_match_all() function matches all occurrences of pattern in string.
preg_replace() The preg_replace() function operates just like ereg_replace(), except that regular expressions can be used in the pattern and replacement input parameters.
preg_split() The preg_split() function operates exactly like split(), except that regular expressions are accepted as input parameters for pattern.
preg_grep() The preg_grep() function searches all elements of input_array, returning all elements matching the regexp pattern.

preg_ quote() Quote regular expression characters

 

Validate domain name

Verify if a string is a valid domain name.

$url = "http://komunitasweb.com/";
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) {
    echo "Your url is ok.";
} else {
    echo "Wrong url.";
}

» Source

Enlight a word from a text

This very useful regular expression find a specific word in a text, and enlight it. Extremely useful for search results.

$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor";
$text = preg_replace("/b(regex)b/i", '<span style="background:#5fc9f6">1</span>', $text);
echo $text;

» Source

Enlight search results in your WordPress blog

As I just said that the previous code snippet could be very handy on search results, here is a great way to implement it on a WordPress blog.
Open your search.php file and find the the_title() function. Replace it with the following:

echo $title;

Now, just before the modified line, add this code:

<?php
	$title 	= get_the_title();
	$keys= explode(" ",$s);
	$title 	= preg_replace('/('.implode('|', $keys) .')/iu',
		'<strong class="search-excerpt">\0</strong>',
		$title);
?>

Save the search.php file and open style.css. Append the following line to it:

strong.search-excerpt { background: yellow; }

» Source

Get all images from a HTML document

If you ever widhed to be able to get all images form a webpage, this code is a must have for you. You should easily create an image downloader using the power of cURL.

$images = array();
preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media);
unset($data);
$data=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$media[0]);
foreach($data as $url)
{
	$info = pathinfo($url);
	if (isset($info['extension']))
	{
		if (($info['extension'] == 'jpg') ||
		($info['extension'] == 'jpeg') ||
		($info['extension'] == 'gif') ||
		($info['extension'] == 'png'))
		array_push($images, $url);
	}
}

» Source

Remove repeated words (case insensitive)

Often repeating words while typing? This handy regexp will be very helpful.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

» Source

Remove repeated punctuation

Same as above, but with punctuation. Goodbye repeated commas!

$text = preg_replace("/.+/i", ".", $text);

» Source

Matching a XML/HTML tag

This simple function takes two arguments: The first is the tag you’d like to match, and the second is the variable containing the XML or HTML. Once again, this can be very powerful used along with cURL.

function get_tag( $tag, $xml ) {
  $tag = preg_quote($tag);
  preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',
                   $xml,
                   $matches,
                   PREG_PATTERN_ORDER);

  return $matches[1];
}

» Source

Matching an XHTML/XML tag with a certain attribute value

This function is very similar to the previous one, but it allow you to match a tag having a specific attribute. For example, you could easily match <div id=”header”>.

function get_tag( $attr, $value, $xml, $tag=null ) {
  if( is_null($tag) )
    $tag = '\w+';
  else
    $tag = preg_quote($tag);

  $attr = preg_quote($attr);
  $value = preg_quote($value);

  $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*".
                "(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"

  preg_match_all($tag_regex,
                 $xml,
                 $matches,
                 PREG_PATTERN_ORDER);

  return $matches[3];
}

» Source

Matching hexadecimal color values

Another interesting tool for web developers! It allows you to match/validate a hexadecimal color value.

$string = "#555555";
if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {
echo "example 6 successful.";
}

» Source

Find page title

This handy code snippet will find and print the text within the <title> and </title> tags of a html page.

$fp = fopen("http://www.catswhocode.com/blog","r");
while (!feof($fp) ){
    $page .= fgets($fp, 4096);
}

$titre = eregi("<title>(.*)</title>",$page,$regs);
echo $regs[1];
fclose($fp);

 

Parsing Apache logs

Most websites are running on the well-known Apache webserver. If your website does, what about using PHP and some regular expressions to parse Apache logs?

//Logs: Apache web server
//Successful hits to HTML files only.  Useful for counting the number of page views.
'^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'

//Logs: Apache web server
//404 errors only
'^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'

» Source

Replacing double quotes by smart qutotes

If you’re a typographer lover, you’ll probably love this regexp, which allow you to replace normal double quotes by smart quotes. A regular expression of that kind is used by WordPress on contents.

preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);

» Source

Checking password complexity

This regular expression will tests if the input consists of 6 or more letters, digits, underscores and hyphens.
The input must contain at least one upper case letter, one lower case letter and one digit.

'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'

» Source

WordPress: Using regexp to retrieve images from post

As I know many of you are WordPress users, you’ll probably enjoy that code which allow you to retrieve all images from post content and display it.
To use this code on your blog, simply paste the following code on one of your theme files.

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

<?php
$szPostContent = $post->post_content;
$szSearchPattern = '~<img [^>]* />~';

// Run preg_match_all to grab all the images and save the results in $aPics
preg_match_all( $szSearchPattern, $szPostContent, $aPics );

// Check to see if we have at least 1 image
$iNumberOfPics = count($aPics[0]);

if ( $iNumberOfPics > 0 ) {
     // Now here you would do whatever you need to do with the images
     // For this example the images are just displayed
     for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
          echo $aPics[0][$i];
     };
};

endwhile;
endif;
?>

» Source

Generating automatic smileys

Another function used by WordPress, this one allow you to automatically replace a smiley symbol by an image.

$texte='A text with a smiley :-)';
echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);

 

 

76 Comments

  1. Posted July 27, 2009 at 7:00 pm | Permalink

    Just wanna say awesome post. The whole PHP content you showed above really help most of the web developers and help to make their task easy. Me too very thankful to you for this nice post..

  2. Posted July 27, 2009 at 7:09 pm | Permalink

    Hey, I haven’t tested to make sure, but I think the first get_tag function would be broken by the following:


    get_tag('a', '<a title="is a > b?" href="a-gt-b.htm" />Is A > B?</a>');

    The RegEx would match that first > in the attribute and the following text would be returned

    b?” href=”a-gt-b.htm” />Is A > B?

    OK, hopefully none of this comment will be interpreted by WordPress in an unexpected way :)

  3. housed
    Posted July 27, 2009 at 7:22 pm | Permalink

    Hello,
    I don’t undertand how they work. For example if i want that $test don’t have any uppercase letter, how I have to do?

  4. Posted July 27, 2009 at 8:50 pm | Permalink

    first I would like to say, “great article”. I haven’t used RegEx in quite sometime now, but if I remember correctly “[0-9.-] Аny number, dot, or minus sign” in this example the dot will match anything, if you would like match the dot you have to escape it. please correct me if I am wrong.

  5. Posted July 27, 2009 at 9:15 pm | Permalink

    very nice
    thanks

  6. Posted July 27, 2009 at 10:11 pm | Permalink

    Sweet article! I’ve seen a lot of Cats Who Code around the web recently, keep up the great posts and I’ll be following along all the way.

  7. Posted July 27, 2009 at 10:13 pm | Permalink

    I am a big fan of regular expressions, because they can make sorting through a bunch of text so much simpler. I wish I had known about them when I first started coding. This is a cool guide and has some great examples!

  8. Posted July 28, 2009 at 12:10 am | Permalink

    Seems WP has munged up your code (particularly backslash escaping).

  9. Fred P.
    Posted July 28, 2009 at 1:27 am | Permalink

    You mean:

    $text = preg_replace(”/\\.+/i”, “.”, $text);

  10. Posted July 28, 2009 at 1:37 am | Permalink

    Excellent article, I found the code to parse Apache logs and to get all images in a HTML document particularly clever. You did however leave out a very common use for regex that web developers often need to use: validating email addresses.


    $address = 'some email address here';
    $ valid = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address);
    echo $valid;

    The preg_match() function above will of course evaluate to false. Again, excellent article. I will be putting some of these to use in the near future no doubt.

    • Posted May 3, 2010 at 3:24 am | Permalink

      Thanks for such nice regex.
      But can I get an regex which will replace text which is enclosed in html comment.

  11. Posted July 28, 2009 at 3:32 am | Permalink

    That’s a useful list, I recently watched the Themeforest screencast on regex too.

    And to anyone who gets trouble when posting code, just escape them using an encoder like Postable.

  12. Toby
    Posted July 28, 2009 at 3:40 am | Permalink

    Enlight != word. I’d suggest ‘highlight’ instead.

    @#3 – if you want to make sure that you have only lowercase chars in your string $test, do

    if(preg_match(”/[a-z]/”,$test))
    {
    echo ‘all lowercase’;
    }

  13. Toby
    Posted July 28, 2009 at 3:41 am | Permalink

    oops – I see that my five second regex doesn’t quite do what you’re asking for – make that

    if(!preg_match(”/[A-Z]/”,$test))
    {
    echo ‘all lowercase’;
    }

  14. Posted July 28, 2009 at 10:33 am | Permalink

    Merci Jean, c’est complet et et très utile.
    Bye.

  15. Yosh
    Posted July 28, 2009 at 11:17 am | Permalink

    You forgot to escape dots in some of your expressions.
    A dot is a meta-character to match all characters except newline.

  16. Posted July 28, 2009 at 11:56 am | Permalink

    Thanks a lot for these tips.
    Very useful.
    Bookmarked

  17. Posted July 28, 2009 at 7:49 pm | Permalink

    This is an awesome online regex tester. I use it all the time. http://www.spaweditor.com/scripts/regex/index.php

  18. Jedaffra
    Posted July 28, 2009 at 7:50 pm | Permalink

    What do you mean by “enlight” – is that like, highlight?

  19. Posted July 28, 2009 at 9:29 pm | Permalink

    Thanks a lot! Very useful tips and apps! I’ve tried a few already and can’t be more happier.

  20. Posted July 29, 2009 at 2:53 am | Permalink

    Great set of regex’s. Another good one to add would be a decent phone number validation, especially for international #’s, and maybe a clean credit card number validator.

    Anyway, good resource.

  21. Posted July 29, 2009 at 3:07 am | Permalink

    Validate domain name is not working.

    Anyone want to correct this regular expression?

    Error: Found:
    Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’ in D:\projects\regex.php on line 3
    Wrong url.

    $url = “http://komunitasweb.com/”;
    if (preg_match(’/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i’, $url)) {
    echo “Your url is ok.”;
    } else {
    echo “Wrong url.”;
    }

  22. Posted July 29, 2009 at 8:47 am | Permalink

    Regarding the example “Validate domain name” – does that match IDN (Internationalized Domain Name) domains also? Like: http://www.åäö.se

  23. Posted July 29, 2009 at 9:22 am | Permalink

    Good post!….

    would like to add the following ExtJS regexp form validation that you can simply use for PHP regexp as well http://extjs.com/forum/showthread.php?t=4271

  24. Posted July 29, 2009 at 9:59 am | Permalink

    Nice Post! Thanks

  25. Posted July 29, 2009 at 10:02 am | Permalink

    Hi. Just wanted to say that this is an excellent post. I needed someone to explain clearly the meaning of symbols for reg expressions and this does it with ease. Bookmarked and I will be subscribing to the RSS. Many thanks.

  26. Posted July 29, 2009 at 10:15 am | Permalink

    I love this post…. very useful thx

  27. Posted July 29, 2009 at 11:08 am | Permalink

    very great post! anyway this is very useful in some projects, specially for web scrap :) I use to work most this things for a year but suddenly I getting bored..

  28. Bilge
    Posted July 29, 2009 at 1:12 pm | Permalink

    Super cool story, bro. None of these examples actually work since all backslashes have been stripped.

  29. Posted July 29, 2009 at 1:16 pm | Permalink

    Following one is wrong:

    Remove repeated punctuation
    Same as above, but with punctuation. Goodbye repeated commas!

    $text = preg_replace(”/.+/i”, “.”, $text);

    You’re replacing any number of any not a line break character with a dot. If you wished to replace dots, you must escape it first like:

    $text = preg_replace(”/\.+/i”, “.”, $text);

    Or if you wanted to replace multiple commas, put commas (no escaping needed).

  30. Posted July 29, 2009 at 3:56 pm | Permalink

    It looks like a number of the regex strings were modified when you copied and pasted them. Primarily, the backslashes were dropped. For example, you have “/s(w+s)1/i” for the remove repeated words regex when it should be “/\s(\w+\s)\1/i”. Repeated punctuation, hexadecimal color values, smart quotes, password complexity, and probably some others that I missed all have this problem.

  31. Posted July 29, 2009 at 8:13 pm | Permalink

    Love seeing a post not just about regular expressions, but actual usage and examples. Thanks for the post.

  32. Posted July 30, 2009 at 1:38 am | Permalink

    Agree great post for the simple fact you post snippets of code and use real world examples. The replace smiley exmaple is the most useful I think!? ;-) Thanks for the information!

  33. cole
    Posted July 31, 2009 at 3:34 pm | Permalink

    Enlight…highlight…what’s the difference. I’m just a stupid American and I knew what he meant. I’m pretty sure that if I had to, I would have chosen the wrong french word, or tense, or gender…whatever. Good post – simplest, most useful summary of regex I’ve ever read. Thanks.

  34. Posted July 31, 2009 at 8:25 pm | Permalink

    Thanks for the great article.

  35. Mattias
    Posted August 1, 2009 at 2:32 am | Permalink

    Can you please go through the expression for Validate domain name?
    I also got the error =
    Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’

  36. CurtainDog
    Posted August 1, 2009 at 2:58 am | Permalink

    Matching XML tags won’t work if you have similar nested tags. XML in general is quite evil.

  37. Posted August 1, 2009 at 3:05 am | Permalink

    Regular expressions make it more easy for the developers!

  38. Posted August 1, 2009 at 11:11 am | Permalink

    Thanks a lot! Very useful tips and apps! I’ve tried a few already and can’t be more happier.

  39. Zecc
    Posted August 1, 2009 at 7:54 pm | Permalink

    In your domain name validation, you got something like this: :? (d+)?
    I assume it’s meant to validate a port number?

    It should be instead be like this: (:\d+)
    Otherwise it would match a single colon without a number following it.
    Also note there was a backslash missing before the d.

  40. Posted August 1, 2009 at 9:09 pm | Permalink

    Very Usefull! Thanks

  41. Posted August 2, 2009 at 1:59 am | Permalink

    Fantastic article. I was wondering though, any ideas why a preg_replace might not work with the_excerpt, and what could I do to make it work?

  42. Posted August 4, 2009 at 12:29 am | Permalink

    Cool – thanks for yout work.

  43. Posted August 5, 2009 at 2:25 pm | Permalink

    Hi! Pretty nice list of regular expressions. Could be useful. Will check again when i will need them. I also check your blog and there are a lot of useful posts.

  44. Posted August 6, 2009 at 11:35 am | Permalink

    I am really surpried by getting this collections of regular expressions, It’s really very helpful.

  45. Posted August 10, 2009 at 8:52 am | Permalink

    Validate domain name regular expression:

    (?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))

  46. TxRx
    Posted August 10, 2009 at 1:08 pm | Permalink

    Superb post, bookmarked for sure !
    Nice one!

  47. Posted August 10, 2009 at 7:12 pm | Permalink

    helpful codes, thanks for the list..

  48. Posted August 11, 2009 at 5:46 am | Permalink

    How much ever I try, they just don’t seem to get into my head :|
    will bookmark and read again

  49. Posted August 12, 2009 at 12:22 am | Permalink

    Thanks for this post. It’s surprising that many developers don’t really understand the full potential of regular expressions. They write elaborate functions to extract items of data, which can be done with a one line RE!!!

  50. Posted August 18, 2009 at 11:59 am | Permalink

    Thanks, a really great article. I already bookmarked this page.

  51. Posted August 18, 2009 at 5:06 pm | Permalink

    thanks for your information.it is very helpful for me!
    thanks

  52. Jamie Bicknell
    Posted August 25, 2009 at 10:24 am | Permalink

    #9 Matching hexadecimal color values the regex doesnt work for all hexadecimal codes, for examble numeric ones, and alpha numeric. I suggest that this regex is used instead:

    To Validate a Hexadecimal Colour, with or without the #
    /^(#)?([0-9a-f]{1,2}){3}$/i

    To Validate a Hexadecimal Colour, WITH #
    /^#([0-9a-f]{1,2}){3}$/i

    You could use this to replace colours in a string via:
    $str = ‘#6699CC and #00ff44 and #ff0000′;
    echo preg_replace(’|#([0-9a-f]{1,2}){3}|i’,'$0′,$str);

  53. Posted August 26, 2009 at 5:39 pm | Permalink

    That sure cleared some things up! Thanks a lot, keep writing stuff like that. I`m in here on a regular basis just to learn. =)

  54. Posted September 1, 2009 at 7:12 pm | Permalink

    Great info, sure cleared some things up. Guess I still got a couple of things to learn, though. Thank you.

  55. Lo.J
    Posted September 3, 2009 at 12:57 pm | Permalink

    Matching a XML/HTML tag: example does not work, same problem on the source website.
    copy/paste is ok. copy/paste+test is better.
    But i have no anger. Let the light of love shine upon your soul.

  56. Posted September 4, 2009 at 10:44 pm | Permalink

    I use Regular Expressions everyday, could not function without them. Great list by the way!

  57. Posted September 12, 2009 at 5:28 am | Permalink

    Highly informative and useful post. This would be a great reference guide to any web developer out there from beginner to advanced level. All I can say is, “Bravo”!

  58. Posted September 20, 2009 at 2:04 pm | Permalink

    This is useful stuff, will be bookmarking this page!
    Has anyone got a good introduction to php page to look at?

  59. Posted October 1, 2009 at 10:17 am | Permalink

    How can I do this?

    Consider the following sms header

    To: #
    Modem: GSM1
    Sent: 09-09-21 13:25:39
    Message_id: 69
    IMSI: 413022600405030

    I need to get the Message id (number only)

    Please help me to do it…

  60. Posted October 7, 2009 at 12:47 pm | Permalink

    TItle regular expression is incorrect. TITILE tag can have a number of attribues (i.e. lang), so the right one will be the following:
    $titre = eregi(”]*>(.*)”,$page,$regs);

  61. Hans Zena
    Posted October 29, 2009 at 5:27 am | Permalink

    Wonderful list. Here is a very useful regex tester for PHP.

    http://www.pagecolumn.com/tool/pregtest.htm

  62. Posted October 29, 2009 at 10:59 pm | Permalink

    I am having a weird problem with Regex to validate domain names. I am using the following expression “/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i”
    It works fine the first time the user same this regular expression. But if the user saves the same expression the next time, it stops working. Also if I check the expression at this point all the back slashes \ are missing from the expression. What could be the problem.

  63. Posted November 11, 2009 at 1:05 am | Permalink

    Great blog post, exactly what i was looking for and has saved me time figuring it out for myself. Reg-ex is a specialist subject all on its own

  64. Posted December 7, 2009 at 9:41 am | Permalink

    Excellent Article. I learned alot from this article. I was always scared learning regular expressions. but from your article i learned it easily.

  65. Tim
    Posted January 25, 2010 at 9:11 am | Permalink

    This looked like such a great reference. Until I tried copy and paste of one of the code snippets. Then read the comments and realized that some might not work. Not the author’s fault, I’m sure, but it’s disappointing nonetheless it’s been this long and he hasn’t been back to rectify the fault. Another waste of time.

  66. Pascal
    Posted March 1, 2010 at 10:09 am | Permalink

    Remove repeated punctuation is kinda stupid, if you don’t escape the dot. (;

  67. Posted March 1, 2010 at 12:33 pm | Permalink

    I looked forward to reading this post when I saw smashing-mag tweet about it… but I must say I’m quite disappointed to see regular expressions being used for some of the tasks you have outlined.

    The opening was quite good, but I have to note, you missed than \w can replace “a-zA-Z0-9_” and \d for 0-9, but those are quite forgivable oversights.

    Immediatly I’m confronted with a regex to validate a domain name, which fails! it does nothing to check the validity of the top level domain (this would be an enormous regex, which is why regex’s are not recommended for this task), not to mention not being able to copy with new punycode domains.

    The next problem is, using regular expressions for parsing a html document? this is madness. regular expressions are hugely inefficient for this task. If you wish to grab a title, all the a tags, all the img tags, or query a HTML dom for an attribute, use a proper DOM parser. There is a fantastic one built into PHP, called DOM.

    And the last gripe, using a regex to parse an apache log. This is just silly. an apache log could be quite huge. You should write a proper parser for the task, and parse the log through a stream, and not be using a regex against the whole log. Using a regex for this task is going to eat a huge amount of memory, and be slow as hell!

    I’m sorry that these complaints are strongly worded, but you have a huge audience here, you should be doing a much better job than this. People will not advance as coders without pointing in the RIGHT direction, this is taking them off at a tangent they will need to unlearn in the future!

    There are some valid usecases for regular expressions in this post, removing repeated words, doubled punctuation, and even swapping in smileys, but Its sad to see the rest on a post in a site like this. shame on you!

    • Posted March 2, 2010 at 8:37 am | Permalink

      Thanks for the input Ryan. I agree that some items of this posts are “quick and dirty”, such as the “Parse apache log” regexp. Thanks for pointing it out, comments like yours are useful in order to enhance the site quality.

  68. jackfuchs
    Posted March 2, 2010 at 7:59 am | Permalink

    The above comment from Ryan Mauger is a good starting point regarding the contents of this post.

    Stupid regular expressions, miserable code (PHP). Such a bad post.

    You copied the contents for this post from across the web, without having an idea on what bullshit you are spreading, did you?

    “15+ extremely useful regular expressions that any web developer should have in his toolkit”

    Sorry, but it’s embarrassing.

    • Posted March 2, 2010 at 8:32 am | Permalink

      Ryan Mauger explained why he didn’t liked the post, which is a good thing. Too bad you didn’t. If you have better regexp, I’ll be happy to publish them, feel free to share.

    • Posted March 2, 2010 at 9:04 am | Permalink

      Im sorry, but I did not mean to start any sort of flaming here. merely to voice my disappointment. There is no need to be insulting in the way you are here.

      Jean-Baptiste generally does a good job on this site, and hopefully my comments will push him to improve his quality. Comments like yours will only strive to anger and upset, and achieve nothing.

  69. Posted March 6, 2010 at 2:09 pm | Permalink

    ^[a-zA-Z0-9_]{1,}$
    Any word of at least one letter, number or _

    What is this about? Whatever happened to ^\w+$

  70. Justin
    Posted June 30, 2010 at 1:33 am | Permalink

    To all of you who get : Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’

    Simply replace the first ” / ” and last ” / ” (before the “i”) of the pattern (in the preg_match) with the symbol ” # “.

    So the first line of the condition should give you this:

    if (preg_match(’#^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i’, $url)) {

    The regex in itself is not too efficient, but if you think it will be enough for your website, just copy/paste my modifications.

  71. Ipsita
    Posted August 19, 2010 at 9:12 am | Permalink

    Can any one please help me to solve my problem?
    I have more than one label tags () with same class name but different id in my template file.
    Ex:
    I am here
    Asking for help
    like this.

    The data given is only the class name.(Here in the example class name is “user_home_tpl_html”)
    The pattern of the value of the id attribute is id with an integer.(such as id1,id2….id200…id333)

    Now I need the regular expression to get the content of the label tag
    (Here in the example
    1: I am here
    2: Asking for help
    )

    I’ll be obliged if anybody will be interested to help me

61 Trackbacks

  1. [...] 15 PHP regular expressions for web developers Share and Enjoy: [...]

  2. [...] 15 PHP regular expressions for web developerscatswhocode.com [...]

  3. By 15 PHP regular expressions for web developers on July 28, 2009 at 12:37 am

    [...] original here: 15 PHP regular expressions for web developers SHARETHIS.addEntry({ title: "15 PHP regular expressions for web developers", url: [...]

  4. [...] 15 PHP regular expressions for web developers (tags: php regex programming tips regexp wordpress code regular) [...]

  5. [...] can read the full post here. ShareCloseSocial WebE-mail [...]

  6. [...] 15 PHP regular expressions for web developers 15 PHP regular expressions for web developers [...]

  7. [...] Expression is a powerfull tools to manipulate text string. Today I found the 15 example of regex usage in PHP. The examples in that post is something that I looking for all the time. I’m lazy enough to [...]

  8. [...] CatsWhoCode.com today there’s a new article listing fifteen handy regular expressions you might find useful in your day-to-day development (as [...]

  9. [...] CatsWhoCode.com today there’s a new article listing fifteen handy regular expressions you might find useful in your day-to-day development (as [...]

  10. [...] CatsWhoCode.com today there’s a new article listing fifteen handy regular expressions you might find useful in your day-to-day development (as [...]

  11. [...] 15 PHP regular expressions for web developers [...]

  12. By All Teched Up « Caintech.co.uk on July 28, 2009 at 8:55 pm

    [...] CSS-Tricks 7 Secrets to Tweeting Your Corporate Culture How to Buy a Mattress * Get Rich Slowly 15 PHP regular expressions for web developers E-Commerce Web Design Toolbox 22 Free Fonts To Achieve That Hand Drawn Effect Web Design Tutori [...]

  13. By links for 2009-07-28 | Jnbn.Org on July 29, 2009 at 2:37 am

    [...] 15 PHP regular expressions for web developers (tags: regular-expressions web_development programacion tools tutorial php code programming development tutorials scripts tips regex expression regexp regularexpression expressions regular examples snippets) [...]

  14. By Goonanism » links for 2009-07-28 on July 29, 2009 at 3:05 am

    [...] 15 PHP regular expressions for web developers (tags: webdesign javascript php tutorials) [...]

  15. [...] Shared 15 PHP regular expressions for web developers [...]

  16. [...] a un RT de Smashing Magazine llego a una genial lista de 15 expresiones regulares en PHP útiles para desarrolladores en la que se pueden encontrar desde un validador de URI hasta una expresión para parsear logs de [...]

  17. [...] 15 PHP regular expressions for web developers. Tags: [...]

  18. [...] 15 PHP Regular Expressions for Web Developers [...]

  19. [...] Julio 29, 2009 15 PHP regular expressions for web developers. [...]

  20. [...] 15 PHP regular expressions for web developers: http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers [...]

  21. [...] Source: 15 PHP regular expressions for web developers [...]

  22. [...] بین تویترگردى‌هاى امروز این لینک رو پیدا کردم که برام خیلى جالب بود .  این عبارات [...]

  23. [...] Here is the complete article [...]

  24. By BlogBuzz August 1, 2009 on August 1, 2009 at 12:14 pm

    [...] 15 PHP regular expressions for web developers [...]

  25. By WebDev Weekly #31 | ASAP - As Simple as Possible on August 2, 2009 at 10:54 pm

    [...] 15 PHP regular expressions for web developersA nice tutorial about useful regular expressions to be used in PHP. [...]

  26. [...] Link [...]

  27. By 17 PHP Practices That Should Be Banished Forever on August 4, 2009 at 7:00 pm

    [...] tool which when used correctly, can accomplish some pretty amazing things as demonstrated in this excellent article. However, they are far slower than the native PHP string manipulation functions and tend to make [...]

  28. By Best of the Web- July | Web Tutorials on August 5, 2009 at 1:20 pm

    [...] Visit Article [...]

  29. By Best of the Web- July - Programming Blog on August 6, 2009 at 1:44 am

    [...] Visit Article [...]

  30. By Best of the Web- July - Programming Blog on August 6, 2009 at 1:44 am

    [...] Visit Article [...]

  31. By Best of the Web- July « Webby Tutos on August 6, 2009 at 6:16 am

    [...] Visit Article [...]

  32. By Best of the Web- July | Webby Tutos on August 6, 2009 at 6:34 am

    [...] Visit Article [...]

  33. By Best of the Web- July : Webby Tutos on August 7, 2009 at 1:05 am

    [...] Visit Article [...]

  34. By Daily Digest for 2009-08-07 | Pedro Trindade on August 8, 2009 at 9:03 am

    [...] 15 PHP regular expressions for web developers [...]

  35. [...] View More.. [...]

  36. By Best of the Web- July :: CSS :: WEBDESIGN FAN on August 13, 2009 at 2:39 pm

    [...] Visit Article [...]

  37. By 15 Very Useful PHP Tutorials on August 17, 2009 at 3:41 pm

    [...] 13. 15 PHP regular expressions for web developers [...]

  38. [...] 15 PHP regular expressions for web developers. [...]

  39. [...] I have found most comprehensive regular expression on the web. I am sure that It will help you   Read More [...]

  40. [...] 15 PHP Regular Expression for Web Developers [...]

  41. [...] 15 PHP Regular Expression for Web Developers [...]

  42. [...] 15 PHP Regular Expression for Web Developers [...]

  43. [...] 15 PHP Regular Expression for Web Developers [...]

  44. [...] 15 PHP regular expressions for web developers Submitted by Editorial Team [...]

  45. [...] tool which when used correctly, can accomplish some pretty amazing things as demonstrated in this excellent article. However, they are far slower than the native PHP string manipulation functions and tend to make [...]

  46. [...] Источник [...]

  47. By Regular Expressions : Enterprise Research Systems on January 12, 2010 at 3:58 am

    [...] the limit but that’s also much more than most of us need.  I found this simple list of 15 common regular expressions covers most of what many of us need.  Here’s a great cheat sheet to jog your memory once [...]

  48. By VaxCave » Daily links for March 01, 2010 on March 1, 2010 at 10:03 pm

    [...] links for March 01, 2010 Filed under: General — by Automaton on 3/1/2010 @ 9:55 pm 15 PHP regular expressions for web developers Essentially an intro to regex. (tags: webdesign programming regex) Comments [...]

  49. By links for 2010-03-02 | Widmann Martin Blog on March 2, 2010 at 12:05 pm

    [...] 15 PHP regular expressions for web developers (tags: examples php regular expressions regexp) [...]

  50. By Bookmarks vom 02.03.2010 on March 2, 2010 at 7:16 pm

    [...] 15 PHP regular expressions for web developers – [...]

  51. [...] buon Jean Baptiste Jung ha riunito in un articolo ben 15 utilissimi usi delle espressioni regolari, tutte facenti uso del [...]

  52. By uberVU - social comments on March 4, 2010 at 11:30 pm

    Social comments and analytics for this post…

    This post was mentioned on Twitter by catswhocode: 15 PHP regular expressions for web developers http://tr.im/ueKB (Please RT!!)…

  53. [...] 15 expressions régulières pour les développeurs PHP [...]

  54. [...] you’re interested in regular expressions, make sure you have read our “15 PHP regular expression for developers” post. Share this on del.icio.us Digg this! Stumble upon something good? Share it on [...]

  55. [...] 15 PHP Regular Expressions — 15 trucs et astuces PHP pour développeurs web. [...]

  56. [...] PCRE page Learning to Use Regular Expressions by Example (might be a bit outdated, we’ll see) 15 PHP Regular Expressions For Web Developers – Cats Who [...]

  57. [...] http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers – I’ll be the first to admit that regular expressions aren’t my strong suit.  This has some very useful ones for those of us that aren’t as regex inclined. [...]

  58. [...] » Čítať ďalej originálny článok Komentáre (0) k článku “15 PHP Regular Expressions For Web Developers” [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting

  • Smashing Network
  • Hosted by VPS.net and Akamai CDN
WordPress Appliance - Powered by TurnKey Linux