Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Books Media Book Reviews

Mastering Regular Expressions 252

gianluca writes "Having always been a heedful guy, I always duly did my homework, going through the lengthy manual pages of a number of regular expressions (regex) crunching tools. You name it: be it PERL, awk, emacs, sed or even one of the .NET framework languages -- any such program provides support for the same regex expressions (or at least, so they seem to the occasional observer). After some years of regex practice with these tools, I had the pretentious conviction that I knew my way through the intricacies of patterns, grouping, greediness, and the like. When I first stepped into Mastering Regular Expressions, looking at the nearly 500 pages which build up Friedl's book, I wondered what could someone ever have to say about regexes to fill so many pages." Gianluca ended up finding plenty of worthwhile content; read below for his review.
Mastering Regular Expressions, 2nd edition
author Jeffrey E. Friedl
pages 460
publisher O'Reilly
rating 9.5
reviewer Gianluca Insolvibile
ISBN 0596002890
summary An in-depth guide to lead the apprentice to mastering regular expressions' wizardry

My first suspicion, I admit, was that I was facing one of the countless "man page reprints" that you find these days. It was only after reading the book that I eventually understood: before then, I had had no idea of what regexes were really about.

What it's about

The book is logically divided into three parts: the first one (Chapters 1, 2 and 3) introduces the reader to the basic concepts of regexes, building a common ground upon which the subsequent chapters will be based. The introduction is clear and straightforward, and lets the readers quickly grasp the key points in the regex business. This part is more or less a good summary, presenting information that can be found also in existing manual pages (albeit presented in a distilled form, which lets you perceive that the author has very clear ideas about the matter). If you already know something about regexes, you could skip this part entirely -- even if reading it turns out to be a nice occasion to brush up and overhaul your knowledge.

The second part (Chapters 4, 5 and 6), is the one that struck me most for the depth of provided information and the richness of though. Rather than throwing at the reader usage dictates on one or another regex flavour, the author explains with a wealth of details the inward mechanisms which make regexes run and how you can exploit such knowledge to write better expressions.

Chapter 4 presents the different families of regex processing engines (namely, DFA, traditional and POSIX NFA), whose internal behavior differs so greatly that writing a regex in the appropriate way can make a substantial difference in both efficacy and efficiency. If you thought you knew it all about greedy and lazy regex operators, possessive quantifiers, backreferences and lookaround, you'd better think again: I was pleasantly surprised to discover how ignorant I was (to be honest, I had never heard of lookaround operators before!).

Chapter 5 slows down a little bit to let the reader absorb the massive previous chapter. Some simple (but still tricky) examples are presented, showing how to apply the techniques explained up to this point. A couple of examples are perhaps too contrived (ever needed to match aligned groups of 5 digits in an unspaced stream of characters?), but it is instructive anyway to follow the reasoning behind the construction of a complex regex.

Chapter 6 focuses on efficiency, considering how backtracking and matching can drive your regex engine to exponential complexities. Optimization techniques are then presented, first by explaining the automatic optimizations performed by the most common regex engines and then by giving a practical list of hints that you can follow to be sure that your expression will run as fast as possible. Again, I was quite surprised to find out how small changes in a regex can make such a big difference to the engine (and give rise to noticeable performance penalties if ignored).

What I absolutely liked most was that the author explains exactly why a certain optimization works, based on the information given in Chapter 4 (and provided that you have been able to assimilate it in the first pass). Finally, a paragraph entitled "Unrolling the loop" really put me in a good mood, reminding me of the past times of "old school" asm programming.

The third part of the book devotes three chapters to PERL, Java and .NET, respectively. Each chapter goes through the syntax and features of regexes for each language: while the information provided on Java and (VB).NET is quite commonplace, in the case of PERL the author deals with aspects rarely covered elsewhere, like dynamic regexes, embedded-code constructs, regex-literal overloading and specific optimization techniques.

What's to like

In one word: insight. The author is definitely knowledgeable of regular expressions and the whole book is filled with thoughtful suggestions and hints. Still, a friendly and straightforward writing style makes reading pleasant and seldom boring (well, you wanted details, didn't you?) while you learn internal regex mechanics rarely available elsewhere.

A further nice point is the broad view offered to the reader, starting from regexes in general and focusing on specific flavours only in the final part of the book. The second edition also offers up-to-date information, covering the .NET framework and the latest versions of PERL (5.8) and Java (1.4).

What's to consider

Despite the book's reassuring conversational tone, dealing with such a specific topic with so many in-depth details might sometimes become boring, especially if you do not have a strong interest in getting the most out of regular expressions or in knowing how they internally work. If you are just an occasional regex user and dwell in manual pages, you can probably live without this book. Also, it is a pity that specific sections on Tcl, emacs and awk have disappeared in the second edition (maybe they were not as current as the .NET framework ?) and that pcre (a C regex library) is barely mentioned.

The summary

Regular expressions are tied so strongly to the *nix culture that everyone who has been exposed to that culture has come to use them in a more or less conscious way. Still, most of the documentation around lags on basic features and presents only the most common regex operators. Mastering Regular Expressions is the book to read if you want to go further and get serious about regexes: even if extreme optimization might not be a big concern today, understanding how regex engines work under the hood greatly helps also in creating everyday small expressions.

Table of Contents

Preface
Chapter 1. Introduction to Regular Expressions
Chapter 2. Extended Introductory Examples
Chapter 3. Overview of Regular Expression Features and Flavors
Chapter 4. The Mechanics of Expression Processing
Chapter 5. Practical regex techniques
Chapter 6. Crafting a Regular Expression
Chapter 7. Perl
Chapter 8. Java
Chapter 9. .NET


You can purchase the Mastering Regular Expressions, 2nd edition from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

This discussion has been archived. No new comments can be posted.

Mastering Regular Expressions

Comments Filter:
  • by Anonymous Coward on Tuesday June 24, 2003 @12:16PM (#6285266)
    when figuring out the lameness filter
  • by Gortbusters.org ( 637314 ) on Tuesday June 24, 2003 @12:19PM (#6285302) Homepage Journal
    This sounds like a nifty tool for those who have to switch programming environments quite often. I always find myself going back to the books when I either have to write a regex myself or decypher someone elses crazy looking expression.
    • But what drives me nuts about using regexps is how they differ slightly from implementation to implementation. Even though the perl regexp's tend to be the de-facto standard, the perl people are frequently adding stuff to their regexps. Some regexp implementations require you to escape open-paren to get the special meaning, and not escaped to match an open paren. Others require just the opposite. Madness!
      • While it may not help in the confusion, what you're seeing with the escape-open-paren vs. not is the difference between Basic and Extended regular expressions in POSIX parlance. Or, to quote the GNU grep man page:
        In basic regular expressions the metacharacters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).
      • by IpalindromeI ( 515070 ) on Tuesday June 24, 2003 @02:57PM (#6287009) Journal
        Even though the perl regexp's tend to be the de-facto standard, the perl people are frequently adding stuff to their regexps.

        Damn those Perl people and their innovations. Why can't they just be happy doing everything the familiar, crappy way? Why must they push the envelope to make things easier and better? I hate that.

        PS. I hope you haven't seen this yet [perl.org]. It'll really boil your blood.
        • I hope you haven't seen this yet [perl.org]. It'll really boil your blood.

          Can I just say that I really like Larry Wall? I mean, reading that document, I realize that he is sooo good for Perl culture. You won't hear "that's how it has always been done" from him. His focus is on how to build a better system, not politics, not grandstanding. I would be very happy to see this kind of openness and disarmingly reasonable attitude influence certain other people in the Perl community.

          Of course, I could be extrapolatin

    • I'm surprised PHP isn't in there. I guess you can just use perl compatible regular expression functions.
    • ...about switching programming environments. Right now there's some discussion about problems in regex engines which follow you around as you switch environments, due to problems in the engines.

      Curent versions of glibc (apparently) made some inefficient design choices in their regex engine. When other tools such as sed switched to using glibc's version, their performance dropped quite a bit, leading to a couple [debian.org] of bug reports [debian.org].

      The interesting thing is, one of the messages in the bug report mentions thi

  • Don't go overboard (Score:3, Interesting)

    by apsmith ( 17989 ) * on Tuesday June 24, 2003 @12:20PM (#6285311) Homepage
    I read the first edition of this book - it was great, and completely changed the way I handled (and understood) perl regular expressions. It's tempting, after reading this book, to try to apply regex's to everything! Friedl had an example of a huge, horrible (but efficient) regex to parse mail headers in the first edition - my advice on that is, don't try that at home! Interspersing procedural logic with the regex's tends to make much cleaner and more readable code...
    • by sharlskdy ( 460886 ) <scottman&telus,net> on Tuesday June 24, 2003 @12:27PM (#6285395) Homepage
      When all you have is a hammer, everything looks like a nail. And, REGEX is one HUGE hammer!
    • by tshak ( 173364 ) on Tuesday June 24, 2003 @03:46PM (#6287584) Homepage
      Friedl had an example of a huge, horrible (but efficient) regex to parse mail headers in the first edition

      And I'm pissed that it's NOT in the second edition (at least it couldn't easily be found). I was trying to impress this chick at B&N the other day by showing her how I understood that longass expression and low-and-behold, the back page where it's SUPPOSED to be is filled with a 3 line regex - not very impressive after you've made a huge deal about a full-page regex. Fortunately it all worked out since I had the original at home, and I was like "well, you'll just have to come over to MY place to check out the big regex". ;-)

    • And I'm pissed that it's NOT in the second edition (at least it couldn't easily be found). I was trying to impress this chick at B&N the other day by showing her how I understood that longass expression and low-and-behold, the back page where it's SUPPOSED to be is filled with a 3 line regex - not very impressive after you've made a huge deal about a full-page regex. Fortunately it all worked out since I had the original at home, and I was like "well, you'll just have to come over to MY place to check o

  • by $calar ( 590356 )
    I am so happy that this book is out. I love regular expressions (first saw them in Perl and JavaScript), and I considered buying the first edition from O'Reilly last year, but I thought that it would be best to wait and get the next edition (plus I had about 5 other O'Reilly titles to read at the time). I wish that there was better support for regular expressions in languages like C/C++. Does anyone know of a good library for it because there is no support for it in the language that I know of? Thanks.
  • by khef ( 681832 ) on Tuesday June 24, 2003 @12:22PM (#6285332)
    Can anyone that's read this describe what's changed from the first edition? Is it worth shelling out the cash if you already have the first one?
  • by L. VeGas ( 580015 ) on Tuesday June 24, 2003 @12:25PM (#6285367) Homepage Journal
    but instead I *
    • by Anonymous Coward on Tuesday June 24, 2003 @12:31PM (#6285444)
      Now, I thought I was reading a simple article about a programming book review. And here I come across this thread of epic mirth. Somehow you have single-handedly crafted a finely-tuned piece fun-joy from what was a rather mundane topic. I just have to page my boss back to the office to see this! Gather round the water cooler old salts and let me spin a comedic yarn I saw this day on Slashdot. Using an asterix to finish a sentence we would have all seen as being finished in a different manner? Well sir, someone set you up the bomb. You have taken that bomb, added the asterix into the mix and exploded laugh-shrapnel into Slashdot proper. I couldn't even scroll down without getting struck in the eye with a piece of your fun-bomb. Mods, mod this man's excursion into the comedy arena as +5 StopItHurts. Here we sit, emotionally spent and basking in the aftermath of your comedic genius. Thank you kind sir, thank you.
    • but instead I *

      ...read spaces to the end of the line, or the next non-space character :-)

  • by cybermint ( 255744 ) on Tuesday June 24, 2003 @12:26PM (#6285381)
    I just purchased an almost new copy on Half.com for under $15 including shipping. There are still a few left at prices far lower than amazon.com or bn.com. Here is the half/ebay link [ebay.com].
  • by BabyDave ( 575083 ) on Tuesday June 24, 2003 @12:26PM (#6285385)
    Regular expressions are tied so strongly to the *nix culture
    Shouldn't that be .*nix instead?
  • I read the first edition and loved it. Can anyone who has read both editions say if it's worth buying the second edition?

    My only complaint about the book is that non-techies looked at the title when I was reading and said, "Aren't 'Hi there' are 'How are you?' regular expressions?"

  • Perl, not "PERL" (Score:5, Informative)

    by carl67lp ( 465321 ) on Tuesday June 24, 2003 @12:28PM (#6285399) Journal

    It's always surprised me when I see intelligent people write "PERL" when they refer to Larry Wall's programming language.

    From the Perl FAQ, General Questions About Perl:

    What's the difference between "perl" and "Perl"?
    One bit. Oh, you weren't talking ASCII? :-) Larry now uses ``Perl'' to signify the language proper and ``perl'' the implementation of it, i.e. the current interpreter. Hence Tom's quip that ``Nothing but perl can parse Perl.'' You may or may not choose to follow this usage. For example, parallelism means ``awk and perl'' and ``Python and Perl'' look ok, while ``awk and Perl'' and ``Python and perl'' do not. But never write ``PERL'', because perl isn't really an acronym, aprocryphal folklore and post-facto expansions notwithstanding.

    You can read the entire FAQ [perl.com] if you like.

    • Re:Perl, not "PERL" (Score:5, Informative)

      by br0ck ( 237309 ) on Tuesday June 24, 2003 @01:26PM (#6286045)
      From an interesting interview with Larry Wall [linuxjournal.com] - 1999..

      Marjorie: Well, that certainly answered the question fully. I must admit I didn't expect you to go back as far as the beginning of the Universe. :-) How'd you come up with that name?

      Larry: I wanted a short name with positive connotations. (I would never name a language ``Scheme'' or ``Python'', for instance.) I actually looked at every three- and four-letter word in the dictionary and rejected them all. I briefly toyed with the idea of naming it after my wife, Gloria, but that promised to be confusing on the domestic front. Eventually I came up with the name ``pearl'', with the gloss Practical Extraction and Report Language. The ``a'' was still in the name when I made that one up. But I heard rumors of some obscure graphics language named ``pearl'', so I shortened it to ``perl''. (The ``a'' had already disappeared by the time I gave Perl its alternate gloss, Pathologically Eclectic Rubbish Lister.)

      Another interesting tidbit is that the name ``perl'' wasn't capitalized at first. UNIX was still very much a lower-case-only OS at the time. In fact, I think you could call it an anti-upper-case OS. It's a bit like the folks who start posting on the Net and affect not to capitalize anything. Eventually, most of them come back to the point where they realize occasional capitalization is useful for efficient communication. In Perl's case, we realized about the time of Perl 4 that it was useful to distinguish between ``perl'' the program and ``Perl'' the language. If you find a first edition of the Camel Book, you'll see that the title was Programming perl, with a small ``p''. Nowadays, the title is Programming Perl.
  • I concur (Score:5, Insightful)

    by Speare ( 84249 ) on Tuesday June 24, 2003 @12:29PM (#6285413) Homepage Journal
    I completely concur with the poster's prejudices and pleasant surprise at the scope of the book. Having learned and used regex since 1986, and having worked on the internals of a couple lightweight C regex engines, I figured I knew all I needed to know. Having seen how many people just get hung up on the basic concept and syntax of regex, I assumed this was going to be a rehash.

    This is no "Learn Regex in 21 Days" or "Regex for Dummies" book with lots of tips on page 400 about how the | is useful for finding Jones OR Smith. If you haven't gotten that down yet, this book's not for you.

    As the reviewer says, this is a very worthwhile cover-to-cover read which will turn your empirical experiences with regex into a more structured understanding of the science and engineering of advanced regex. As a reference on my shelf, it sits comfortably next to Knuth's AoCP and Foley & van Damme.

  • netLibrary (Score:5, Informative)

    by dboyles ( 65512 ) on Tuesday June 24, 2003 @12:29PM (#6285415) Homepage
    I first started reading this book via netLibrary [netlibrary.com] through my school's library. Just the first two chapters are enough to explain regular expressions to the point where one can use them effectively in programs. The remaining chapters expand on this information and discuss language specifics. I bought a paper copy to have on my shelf, and I constantly find myself referencing it.

    To those at universities, see if your school offers netLibrary-based books. It's easy to read and it's free.
  • by TheFlyingGoat ( 161967 ) on Tuesday June 24, 2003 @12:37PM (#6285503) Homepage Journal
    s/\A(.*?)\s+(.*)\Z/In soviet Russia, $2 $1s you!/i;
  • They can be hard (Score:5, Informative)

    by DeadSea ( 69598 ) * on Tuesday June 24, 2003 @12:37PM (#6285508) Homepage Journal
    I know from my own experiences that writing a regular expression to describe something is not always as easy as it would seem at first glance. I found it difficult to write a regular expression to define a c-style comment: /* comment */ Well, not impossible, just more difficult that I thought it would be. I posted my thought process about how I constructed a regular expression to pick out a c-style comment [ostermiller.org] on my website. It's the kind of thing I like to ask interview candidates.
    • Your perl example is far too complicated. Why not just say something like: m#(/\*.*?\*/)#s; to grab the comment?
    • by dargaud ( 518470 ) * <slashdot2@@@gdargaud...net> on Tuesday June 24, 2003 @01:04PM (#6285771) Homepage
      Not to nitpick too much, but I think your regexp finds the following when it's actually not a comment:

      printf("Comments in C are written like /* this */ although I prefer the // C++ style");

      That's why we use parsers to write compilers and not regexps. I came back from Perl after a few months using it, being very disillusionned by its read-onlyness.

      • Re:They can be hard (Score:3, Informative)

        by DeadSea ( 69598 ) *
        You make an excellent point. The regular expression I came up with would not do the right thing in that situation when finding comments in your text editor.

        Parsers are, however, based on regular expressions. I orginally wrote this regular expression when I was writing a lexer (using JFlex [jflex.de]) for Java. The examples that I saw used a state machine and I wanted to do it with a regex. When combined with regular expression to find sting literals (and all the regular expressions for other junk), it does the r

    • Re:They can be hard (Score:4, Informative)

      by Otter ( 3800 ) on Tuesday June 24, 2003 @01:05PM (#6285779) Journal
      It's probably worth mentioning: KDE comes with a GUI regexp constructor [blackie.dk]. Googling for alternatives shows a similar Windows app [riesterer.free.fr].
    • Looks like the book is for you :-)

      /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
      Using a non-greedy quantifier, this could be as easy as /\*.*?\*/, if you can make your implementation have . match newlines.
    • And your website proved a point of mine:

      It's difficult to know if your regex is really correct for the stuff your're parsing.

      I mean, it might work for the 9 cases of input you have. But for the 10th case, bam! your regex doesn't parse the 10th input properly. And reading regexs is worse than reading assembly IMO, when you want to fix a bug in some regex 6 months after you've written it.

      But if you know your regex is correct, you can reduce 100 lines down to a mere two lines of code. So it's beautiful o
  • Regex Learning Tool (Score:5, Informative)

    by johndiii ( 229824 ) * on Tuesday June 24, 2003 @12:39PM (#6285522) Journal
    Regex Coach [weitz.de] is a great free tool for learning about regular expressions and constructing them interactively. Both Linux and Windows versions are available.
  • Online resource (Score:4, Informative)

    by dema ( 103780 ) on Tuesday June 24, 2003 @12:42PM (#6285548) Homepage
    I'd be interested to check that book out as I use reg expressions a lot in PHP. But for those of you looking for a resouce online check out RegExLib [regexlib.com]. I use it often when I'm having trouble putting an expression together and have found it extremely helpful.
  • From Windows (Score:4, Insightful)

    by Quill_28 ( 553921 ) on Tuesday June 24, 2003 @12:42PM (#6285549) Journal
    Going from windows to unix one of the things I liked most about unix was the wide spread usage of regex in various applications. Quite powerful.

  • by jdew ( 644405 ) on Tuesday June 24, 2003 @12:46PM (#6285594)
    Thats a big regex [ex-parrot.com]
    stupid filter wouldn't let me paste the regex here XD
    • whoa.. the mail checking regex's i write generally look for an @ and the presences of a . followed by 3 letters.. I don't think I'd want to try and recreate that one..
    • Another fun one is the REX shallow XML parser algorithm that's been around for some time. Check out http://www.cs.sfu.ca/~cameron/REX.html and scroll to appendix A for a Perl implementation. I recently had to reverse-engineer this approach and write a stack-based parser to run in an environment where Perl's :?$foo construct was broken. Much fun...
  • REGEX for Brazilians (Score:2, Informative)

    by maizena ( 640458 )
    Regex rules, but I wouldn't know anything if it wasn't for this book in portuguese: http://guia-er.sourceforge.net/ [sourceforge.net]. The printed version is always with me wherever I go.
  • Does anyone here know how to do multi-line regexes in perl? I've seen the notation on how to do it (Mastering Regular Expressions has one paragraph for it), but nothing seems to work...
    • I usually use s/old/new/gs or m/expr/gs in perl

      Codebits used to have a lot on this, but the page has since moved [codebits.com] and seems to be having permissions errors at this moment.

      If you want, you could always email me (phormix at phormix dot com) and I can attempt to help you with your regexp woes - I've used a lot of multiline perl regexps for HTML processors, etc.
  • Regex rant (Score:5, Insightful)

    by Tablizer ( 95088 ) on Tuesday June 24, 2003 @12:52PM (#6285664) Journal
    The problem with regex's is that if you don't use them often, you forget a lot of the finer details. They are not self-documenting at all. I think something like "generators" used in some of the compiler tools floating around are more intuative. For example, you can define a "LISP-lite" language like this:

    statement -> (command params)
    statement -> (command)
    params -> params params
    params -> constant
    params -> variable
    params -> statement
  • Newbie review (Score:3, Informative)

    by Telastyn ( 206146 ) on Tuesday June 24, 2003 @12:55PM (#6285702)
    I also have this book [actually right next to me]. I'd put off learning perl [and indirectly regexes] for some time, because... well, I was a windows admin by trade. Now that I do other [actual] work, time came to pickup on some other tools.

    Even having not dealt with regexes pretty much at all, the book was very easy to get into. The first few chapters go through the basic matching structures, along with requisite history. All of the points are done with understandable real life examples, with diagrams and [a small amount] of actual code. The later chapters go through individual languages, and goes through which features are there, what the nuances are, and a few of the gotchas. I must admit that I probably learned more useful things about perl from this book than from any other source. There is also a large section [which I did not read, and caanot comment on] which actually details the nuts and guts of regexes.

    All and all, it's easily the best instructional [as opposed to reference] text I've ever purchased.
  • My first suspicion, I admit, was that I was facing one of the countless "man page reprints" that you find these days.

    No, that would be OReilly's in a nutshell series of books..
  • errata (Score:4, Informative)

    by Anonymous Coward on Tuesday June 24, 2003 @01:09PM (#6285839)
    The reviewer forgot to mention the wonderful errata list of the book! Can be found here [regex.info].
  • (to be honest, I had never heard of lookaround operators before!).

    Gezzzz, This guy hasn't even heard of lookaround operators before? What a clueless fool! He should be driven from /. after being tarred and feathered!

    Everyone knows that a lookaround operator is that guy that goes into the bank first to make sure that there aren't any armed guards or policemen/women getting their paychecks deposited.

    /me runs and hides now! ;-)

  • Interpretting parser (Score:3, Informative)

    by Frans Faase ( 648933 ) on Tuesday June 24, 2003 @01:21PM (#6285976) Homepage
    If you want to have something more powerful than regexprs, and still have it as an interpretter, you might have a look at an interpretting parser that I wrote: IParse [planet.nl].
  • I never really thought you could fill a book about regular expressions, but this one manages to accomplish this while at the same time being very interesting. This is absolutely required reading if you know "enough to get by" with regular expressions. Chances are, until you read this, you're making a ton of common mistakes and you don't even know about it.
  • Or without a book... (Score:3, Informative)

    by Iscariot_ ( 166362 ) on Tuesday June 24, 2003 @01:31PM (#6286096)
    For those who don't want to buy a book, here's a nice page with pre-built regexps for doing all sorts of things: RegexLib [regexlib.com].
  • re-builder for Emacs (Score:3, Informative)

    by David Ishee ( 6015 ) on Tuesday June 24, 2003 @01:41PM (#6286211) Homepage
    The re-builder mode is great for debugging regexps in Emacs. This is the latest version as far as I can tell: re-builder 1.2 [google.com]
  • I have a previous version of Friedl's book and found it needlessly confusing. The author's examples often leave much to be desired. I have no doubt that all of the information about regex is somewhere in the book, but it takes an extraordinary amount of work on the reader's part to extract it.
    • by melonman ( 608440 ) on Tuesday June 24, 2003 @03:15PM (#6287254) Journal

      I loved the first edition, probably for the reasons you didn't. I'd read several short overviews of regexes, including Larry Wall's one in the Camel book, and, while they got me doing simple stuff, they left me with lots of unanswered questions, and the more I experimented the more my "why doesn't that work?" list grew. The Friedl book is totally thorough, and, I thought, aggessively pedagogical, if you want to learn about how a regex engine works rather than pick up stuff in a cookbook fashion.

      That said, I do wonder about the guy. The colophon was astounding: he wrote half the book using regexes on a computer on the other side of the world, using a 37.5 bit/hour connection by the sound of it, and then he proceeded to write his own typesetting system so he could produce a phoenetically alphabetical index in English, Japanese and probably some other languages that I missed. I think he ought to get out more...

  • by ClubStew ( 113954 ) on Tuesday June 24, 2003 @02:09PM (#6286499) Homepage

    ...or even one of the .NET framework languages

    There are no ".NET framework" languages. There are languages that target the Common Language Runtime, or the CLR. The .NET Framework is nearly a class library like the JDK/JRE. If he doesn't even know that, why should I trust his book review?

  • by BinaryCodedDecimal ( 646968 ) on Tuesday June 24, 2003 @03:03PM (#6287084)
    Mastering Regular Expressions:

    Repeat after me:

    "I'm so hungry, I could eat a horse."

    "It's been raining cats and dogs."

    "I'll sleep with you when Hell freezes over."

    And my personal favourite:

    "Oh look, Hell just froze over!"
  • by RevMike ( 632002 ) <revMike@@@gmail...com> on Tuesday June 24, 2003 @03:14PM (#6287235) Journal
    I have to agree that this is a book that should be on everyone's shelf.

    The very fact that both vi and emacs support regular expressions must mean they are a best-in-breed tool, because if there was a way for those two communities to disagree, they would have done it.

    I love the fact that I can use the same expressions with grep, sed, vim, Perl, and Java. that being said, however, the critics are who warn that regex can be over used are correct: regex's are difficult to debug and to maintain, so don't go overboard.

  • contrived examples? (Score:5, Interesting)

    by anonymous loser ( 58627 ) on Tuesday June 24, 2003 @03:25PM (#6287368)
    (ever needed to match aligned groups of 5 digits in an unspaced stream of characters?)

    Yes, actually. Older FORTRAN codes (that have been slowly added to/modified over time) especially exhibit this kind of behavior thanks to formats that allow you to specify columns for output. The numbers actually run into each other on the line, and the only way to read the file is to know which column the data you want is in. I would never discount any regular expression example as contrived. Somewhere, someone has developed a program that uses that formatting in an input or output file, and someone else might need to be able to speak it's language in an automated fashion.

  • by jdew ( 644405 ) on Tuesday June 24, 2003 @03:33PM (#6287451)
    what did one regular expression say to the other?
    .*
  • Sample Chapters (Score:3, Informative)

    by darkpurpleblob ( 180550 ) on Tuesday June 24, 2003 @04:11PM (#6287893)
    A sample chapters from the book, Java and .NET are available in PDF format from the book page on O'Reilly's site [oreilly.com].

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...