Mark Sanborn Mark Sanborn Fishing Mark Sanborn

Coder, Entrepreneur, Blogger, and Coffee Addict

The Perl Regular Expression Challenge

With my newly acquired Perl and regular expression skills I was trying to put them to the test and get a little practice. I asked a friend of mine if he had any regular expressions I should write. He first gave me an easy one. Replace ‘foo‘ with ‘bar‘ only when bar follows the word ‘blah‘. So after a minute or two I returned with a working regular expression.

Well that was easy…

Now for something a little trickier. He said, I want a regular expression that would print out words that land on every third letter ‘e‘ except if that word was ‘the‘. This doesn’t mean he wanted the third word that has the letter ‘e‘.

To further clarify

 
Meet the Press!‘ Would match only ‘Press!‘ since the is excluded.
Meet them guys there‘ Would match the word ‘them‘. Although it them is the second word it is the third time ‘e‘ is used in the string.
eeeeee‘ would match the word ‘eeeeee‘ twice, although we would probably not find that word too often.
Them them thee rem em shem‘ Would match em. Notice how the second ‘e‘ counts towards the next match.

It took me awhile to figure out the solution to this problem because I was trying to solve the problem with pure regular expressions. Which I am told is not possible.

I ended up solving the problem with a little bit of Perl code with the help of two simple regular expressions. If you are looking for a challenge or hone in your skills this is a great problem to practice with. If you are learning a new language this problem incorporates many of the needed elements in programming and will help you learn the language.

How I did it

 

#!/usr/bin/perl

use warnings;

$_ = "my test string goes here";
while (/(\w+)/gi) {
	$word = $&;
	while ($word =~ /e/gi) {
		$count++;
		if ($count == 3 and $word ne 'the') {
			print "$word\n";
			$count = 0;
		}
	}
}

Can you do it? I wrote my example in Perl but I would love to see someone do it in other languages. Post your examples or a pastebin of your code.

Note: I have also worked out this example with PHP without using regular expressions. There are multiple ways of solving this problem.



This entry was posted in Miscellaneous, Programming and tagged , , , . Bookmark the permalink.

Comments are closed.

© 2011 All rights reserved

1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216| generic buying erythromycin alesse next day delivery without a prescription motilium no prescription needed buy cytotec pills canadian pharmacy no prescription needed provera actos by internet buying orlistat pharmacy without prescription lisinopril no prescription needed purchase femara medication buy lipitor cod actonel buy online cheap buy carbozyne online without prescription femara prescription discounts elavil without prescriptions pills buying isotretinoin online pharmacy trazodone no prescription order no prescription metformin birth control no prescriptionAccutane Online Doxycycline online Buy Cheap Lexapro Online No Prescription Prednisone Online Buy Accutane No Prescription