Coding 101 23 (Transcript)
Shannon Morse: Today on Coding 101 it’s all about regular expressions. Like happy. And sad. And angry. Stay tuned.
Netcasts you love from people you trust. This is TWIT. Bandwidth for Coding 101 is provided by CacheFly. At C-A-C-H-E-F-L-Y .com. This episode of Coding 101 is brought to you by Squarespace. The all in one platform that makes it fast and easy to create your own professional website or online portfolio. For a free two week trial and 10% off, go to squarespace.com and use the offer code CODING. And by Hover.com. Hover is the best place to buy and manage domain names. It’s simple, honest and easy to use. For 10% off your first purchase go to hover.com and enter the promo code C101.
Fr. Robert Ballecer: Welcome to Coding 101, it’s the twit show where we let you into the wonderful world of the code monkey. I’m Father Robert Ballecer.
Shannon: And I’m Shannon Morse. And for the next 30 minutes we are going to tell you all about everything you need to know to get all coded up and be a code warrior in the world of Perl.
Fr. Robert: Now before we get to that Shannon, there’s a couple of house cleaning items we have to take care of. Because we’ve actually been gone for a while.
Shannon: We have, yeah. I had to do this marriage thing.
Fr. Robert: Yeah, you got married. I mean, whatever. We have a show to do, fine if you want to take a day off for getting married, whatever.
Shannon: Work smirk.
Fr. Robert: Well but we did do the first two episodes of the Perl module back to back. And as a result I have a mia copla here. Which was my show notes, which I thought I had wonderfully packed up before I went away for two weeks of vacation and work, turns out they didn’t work out.
Shannon: Yeah, I went to the Twit site and I was like, where are the show notes?
Fr. Robert: Yeah, so that’s my bad. I’m sorry about that folks. I will get that fixed. And actually this is a good time for me to reconfigure it. There are a few people in our google+ community who are trying to move us to a better way to use GitHub. Using something like MarkUp. And some of it looks really, really promising. So I’m going to toy around with it for the next week or so and see if there’s not a better way for us to put our notes and our code into one place. Because right now it’s kind of separate.
Shannon: Yes it is. We have our show notes over on twit.tv and we have our actual code over on GitHub. But I didn’t think you could use GitHub for more than just uploading the files.
Fr. Robert: You’re not supposed to. But evidently some people have figured it out. And it looks good so I will be jumping around. I will be trying a few things. I’m not going to do it immediately because I don’t want to switch to a new system and then find out that that system won’t do everything we want to do. But I think we can all agree that the way that we’re doing it right now is a little cumbersome especially for first time coders. So we’re going to try to find a better way for you to find all of our code and all of our notes in one simple spot.
Shannon: Yay, I think that sounds great.
Fr. Robert: There is something else that we wanted to do. You know one of the thing that we pride ourselves on is our community right?
Shannon: Oh, yeah. I love our community.
Fr. Robert: It’s a big part of who we are, it’s a big part of what we do. We try to drive people to our G+ community because it’s filled with really bright engineers, with really bright programmers and it’s just a good place to hang out if you want to learn the crap. Well there are some people in our community who are very vocal. And they would like a go at teaching a 101 level course. And you know what, I’m not one to say no. so here’s what we’re going to do. The first one who approached me was a man who is in the community by the name of Jo Heck. He’s been with us since the very beginning. Code4Sale I believe is the moniker that he uses. But he’s an expert programmer and what I want to do is I want to get him two episodes on a Friday. To be able to do the show the way he wants. This is not a challenge folks, this is not “oh yeah? Well put up or shut up”. I honest to goodness want him to be able to do the best job that he can and maybe we’ll take some pointers on how we guide Coding 101.
Shannon: I think it’s a good idea.
Fr. Robert: Yeah. Give us some time because …
Shannon: When I was on Before You Buy I had people come on and do guest reviews.
Fr. Robert: Exactly, yeah that’s how it works, yeah. I mean, no one’s ever got the market on how you teach so we want to hear new ideas. Now it’s going to take us awhile to get the setup because we got to get the logistics worked out because it’s not a standard Coding 101 episode so we have to make sure we have time and I have to make sure we have a format down because obviously you work most of the time away from twit. So stay with us, we will figure this out and we will make sure that we include more of our audience because that’s who we are right? We’re nothing without our audience.
Shannon: Speaking of which, we do have some guest feedback, some guest programming codes. I’m really excited about these because it’s been so many weeks since I’ve actually gotten to play with them. So we’ve got a couple really cool ones in our Google+ community of course. If you haven’t checked that out its over at Gplus.to/twitcoding101.
Fr. Robert: Wow. Gone for three weeks and still pulls them right off the top of your- I love that.
Shannon: But I wanted to go ahead and start off with a very simple code that I decided to do to just review what we’ve learned so far. Now obviously there is tons that you can learn from Perl episode 1 and Perl episode 2 that we’ve already done in our module. But if you’re just catching up I can go ahead and show you what I’ve done so far. So let me go ahead and pull up this code on my computer. And if you want to pull up my computer please. Thank you sir. So if I just click on this it’s going to ask me who my favorite Dr. Who companion is. My personal favorite is Amy. So I’m going to type in Amy.
Fr. Robert: Now those are fighting words.
Shannon: Uh-oh. Oh snap, “You said Amy. I agree. Amy rocks.”
Fr. Robert: Gee, I wonder who programmed that.
Shannon: of course if you do come back in here and say your favorite ends up being Rose, it says “meh, they were okay… I guess. But the best was obviously Amy”. And I say they because there were some males. And then just hit enter to close. Now if I go over here to edit to actually view the code. Ill pull this up so you can see all of it. I did include comments this time. I know some people wanted to see comments, so I did include those. Not very many but it’s a pretty simple code. So you basically just print out at the beginning who’s your favorite Dr. Who companion, \n to enter into a new line. Companion equals standard input. So this is the users input. We’re going to call it companion, whatever they end up inputting into the programming code. Now if the companion equals Amy, or Amelia, so down here it says if the companion is equal to or has Amy included in their input, then it’ll say “You said Amy. I agree, Amy rocks.” Same thing for Amelia. And last week we did learn that G means global. So it’s going to look at all of their input and look for specifically A-M-Y in line. And then the I basically means it doesn’t care if it’s uppercase or lowercase.
Fr. Robert: Right.
Shannon: So I could put this all in upper caps like that, it doesn’t matter. It’ll still read it out “I agree. She rocks.”
Fr. Robert: Now I’m glad that you pointed that out. What we should point out the fact that those, the little qualifiers that you can add to the end of regular expression formuli, are incredibly important. Because that’s one of the things that makes regx so powerful in Perl. Because it lets you search through as you’re doing here. Any string, any piece of data, any file. Looking for particular thing that you want to match or replace. And that’s what you’re doing.
Shannon: Exactly. So that was the if part of my command. I also have the else statement down here. If you do not put in Amy or Amelia, in your standard input, than it’ll just say “you said (whoever you actually did put in)” and then “meh… they’re okay, I guess. But the best was obviously Amy.” And then an enter. And then at the very end it just waits for the user to hit the enter key to close it out.
Fr. Robert: So dismissive. And remember there are other ways to make it wait than using standard input.
Shannon: Yes, there are.
Fr. Robert: That’s the way we’re doing it, if you use another method, that’s fine. Go ahead. It’s not going to hurt our feelings. But standard is actually my favorite.
Shannon: It’s a good one, yeah. It’s easy and it’s the one that I learned so I’m going to use it. Now we also got two more in our Google+ community, again, gplus.to/twitcoding101, go subscribe because its, super fun. Now the first one is from Jerry Coffey and he said this is a simple math trick that he decided to do in Perl. And it totally works and it kind of freaked me out but I’m going to show you it anyway. Alright. Jerry math trick. So think of a number. So I’m going to think of…
Fr. Robert: I hate these. I really do.
Shannon: I know. So I’m going to be thinking of 8. “Press here when you’re ready.” “Multiply that number by 2.” So it would be 16. “Press enter.” “Add 10 to that number.” So it would be 26. “Divide that by 2.” So that would be 13. “Subtract your original from the last.” So that would be 13-8 and that equals what, 5? 5. Then it says “wait while I read your mind.”
Fr. Robert: And he’s a witch.
Shannon: “The answer is 5!”
Fr. Robert: Now of course this is just math, this is just having fun with math. We always remember. But it’s kind of fun to see that in code.
Shannon: It is, it’s super, super cute and it’s a pretty easy code to do too. It’s basically just taking a bunch of standard inputs, which are your enters, and then giving you different output each time at the very end, here, we see that he sleeps it for one second. So that’s something new that we haven’t stepped on yet.
Fr. Robert: Mm-hmm.
Shannon: its sleep for one. And you could also obviously change that to 2, 3 or whatever you wanted to do. So it doesn’t do anything for one second. Pretty cool entry right there. And the answer is 5!
Fr. Robert: It also, you know, the ability to pause is sort of the start of animation. In a programming language. Any time you can pause, you can add motion. It’s a clunky way to do it but I’ve seen people do some awesome things with pausing in asking animation so…
Shannon: I like it. I think it’s pretty neat. Our second one, and our last one for today, is from Darryl Medley. And this is an animal farm sounds program. So if I open up this one, click on the farm. Okay, so first off I’m going to list all the animals on Darryl’s farm. So I click list and it shows you all the animals he has on his farm. He has some good internets for his farm. I’m going to say “sheep”. So I enter sheep and then it says the sheep says “baa, baa”. That’s it. Cow. “Cow says moo”.
Fr. Robert: Are there any snubs on this farm?
Shannon: “oink, oink.” Snubs. Sorry.
Fr. Robert: Aww, so sad.
Shannon: It doesn’t have a snub. And then you can just leave it blank and hit enter for it to exit. That’s it.
Fr. Robert: Yeah. Now this seems really simple but some people were freaking out, and rightfully so. Over the regular expressions. So we’re going to spend a lot of time this episode talking about regular expression. In fact, one of the things I think was a mistake on my part was we didn’t give enough time to our code warrior to really go through regular expression. Give you all the different ways you can use it. And explain why it’s so important. So we’re going to- looking forward to that in just a bit. But before we get to that module I wanted to do one more thing that came to us from our community.
Shannon: Uh-oh. Oh boy. What’s going on?
Fr. Robert: It’s the lighter side of programming.
Shannon: Oh, the lighter side, this is new!
Fr. Robert: So Collin Nelson brought this to our attention in our G+ community for Coding 101 and I don’t know if you’ve got that link up Brian, but he wanted us to take a look at a language that was created by some geeks. Obviously some very bored geeks who created a new programming language based entirely off of Arnold Schwarzenegger’s catch phrases.
Shannon: Oh my gosh.
Fr. Robert: Now, for no reason whatsoever they have created ArnoldC. That allows you to call functions and methods and procedures with commands like “listen to me very carefully”. Which declares methods, or “get your ass to mars” which assigns variables from methods. Now if you go to the actual code itself, to the GitHub, even “hello world” is interesting. It uses for print, “talk to the hand”. And of course every program ends with “you have been terminated”. So… no reason to create something like this, but it just shows that yeah, programmers have a sense of humor too.
Shannon: Oh. Programmers are weird.
Fr. Robert: Okay. So programming experts, if you could make us a Harry Potter language that would be awesome.
Shannon: Wait, is there not already a Harry Potter language?
Fr. Robert: Spells! How awesome would it be to have spells?
Shannon: Oh, that’s a great idea!
Fr. Robert: Seriously, right?
Shannon: Yes! I like it.
Fr. Robert: Okay, that was a horrible idea. It would be fun. I would do it.
Shannon: Aw, I like it. I don’t remember any…
Fr. Robert: It just reminds me of my college days and there was always that one geek who hated all of the compilers so he wrote his own.
Shannon: Expecto Patronum!
Fr. Robert: It’s like, why would you do that?
Shannon: Well, you know, a site is online and it’s available to you, that enables you to not have to learn code.
Fr. Robert: Yeah. And I would like that. Because sometimes you just want to use what’s there, sometimes you just want easy.
Shannon: Yeah, sometimes you just want easy and luckily we have a site called Squarespace. Over at squarespace.com and it’s the one stop platform for everything that you ever need for all of your wonderful programming, websites and all those needs. So squarespace is the number one platform that makes it easy to create or build your own professional website or online portfolio. Some of the reasons why you’re going to love squarespace, because I know you will, they’re constantly improving their platform. With new features, new designs, and even better support. And they have beautiful designs. There are over 25 beautiful templates for you to quickly build your own personal and business site. And they also have a really good mobile experience too. So say you’re on the go and you want to check out your website or check out a friend’s website and they are using squarespace, they’ve developed templates with responsive designs. So they’ll know if you’re on your smart phone, your tablet, your computer, and they’ll be able to make it look pretty for you and its super easy like Padre said. So if you want some help squarespace has a live chat and email support 24 hours a day, 7 days a week. Plus there’s a completely redesigned customer help site for easier access to self-help articles and video workshops. Guess what? Your hosting is included.
Fr. Robert: No!
Shannon: Yeah! You don’t have to go to a second site and sign up for hosting, its right there on squarespace. They take care of the hosting. They have a distributer network that does not go down too. So you’re always up no matter what. Even when they had some crazy stuff going on in New York and like, their basement flooded, they take care of you.
Fr. Robert: I love that story. The bucket brigade of fuel.
Shannon: I remember that, my site was still up and I was like YES! And not to mention, it’s really inexpensive. I’m not going to say cheap, because cheap sounds bad. It’s inexpensive, you know, its good quality and it’s inexpensive. Its only 8 bucks a month. And that includes a free domain name if you sign up for a year. So definitely sign up for a year. It’s a good choice, a good value. And their code is gorgeous. They take so much pride in their back end code. Just as much as they do in the front end. So you’re going to get an excellent design and excellent professional quality whether you’re a coder or you just used to work on terrible sites when you were in high school.
Fr. Robert: Just some guy. Just some dude. Yeah.
Fr. Robert: We love you squarespace, thank you.
Shannon: We love them. I put my wedding website on squarespace.
Fr. Robert: What? Really?
Shannon: Yep, I did.
Fr. Robert: Wait, how come you haven’t sent a link.
Shannon: I didn’t share it because it had all the details on there so. I didn’t want crazy people showing up.
Fr. Robert: OH I guess. Yeah. No, there are no crazy people on the internet.
Shannon: Yeah. I did it all on squarespace, it’s super easy. No crazies.
Fr. Robert: Yeah, okay. Let’s get past the crazies and for a second let’s talk about the regular expression. Now I know that in episode 2 of the Perl module we kind of glossed over regular expression. I’m really sorry. The feedback that we have gotten is that we should not have done that. My bad. I thought regular expression was sort of a no brainer. It was something that was going to be simple. Obviously we should have spent more time on it and that’s what we’re going to do this episode. Now Snubs, we’ve done expressions, you’ve seen expressions, like whenever we’re talking about conditions like, if then loops. If then statements for loops. We’re talking about an expression that’s being used in some sort of comparison right?
Fr. Robert: For example, if x is equal to y, or if y is less than 2. Those could be considered expressions but we’re using a conditional operator to find out what kind of action we want to take with that expression.
Fr. Robert: A regular expression is really not that much different, that’s why we thought people would get it right away. It’s looking at a string, and trying to find patterns.
Fr. Robert: Let’s break that down. Just a tiny bit. So when we talk about a regular expression or a regx, or a regx, depending on how you want to call it. But when you’re talking it’s probably easier to call it a regular expression because no one will get mad at your pronunciation. It’s a type of pattern matching that can be used in searches or find and replace operations.
Shannon: OH. Interesting.
Fr. Robert: Yeah. If we break that down even farther, in a regular expression each character in a string becomes its own meta-character. Right. And you can combine meta-characters in order to create something that will be searched for within any piece of data. It can be a single string, it could be an entire file. It could be the entire internet. That’s one of the nice things about using a regular expression. Yeah, it’s weird. But let me explain why that works.
Shannon: Really? Wow.
Fr. Robert: Yeah.so if you learn how to do it in Perl, you’re going to understand regular expressions in all of those other languages.
Shannon: Oh, that’s awesome. That could be very handy.
Fr. Robert: Now, what does this all mean? When we talk about meta-characters and strings and things. Quite simply, a regular expression allows you to find, to match, and to replace any string or piece of string, within anything.
Fr. Robert: Yeah. Which is why Perl becomes so popular with web developers. Because a lot of web development is about data manipulation. It’s about looking through stuff and replacing it with something else.
Shannon: Oh, that totally makes sense now. That’s so cool.
Fr. Robert: You also see regular expressions a lot in search engines. The search engine algorithms, the way that you look for it, it’s based on a regular expression. I mean, when you think about it…
Shannon: No way! That makes sense though. They’re looking through that string and trying to find something that matches it.
Fr. Robert: Right. Now if we, before regular expressions, imagine if you were using a search engine. That would only work if you exactly matched it.
Shannon: Oh gosh.
Fr. Robert: Yeah, right?
Shannon: That would be irritating. I would never get anything done.
Fr. Robert: That would be hugely irritating. Exactly. So for example, if I’m looking for something about Google IO, right? I would have to worry about did I put Google IO as all one word? Did I space it? Did I have a slash? Did I put 2014? I don’t have to do that with a regular expression, I can say, look, the string, the connection of meta-characters I’m looking for is Google and IO. Search the entire internet for that particular string and bring me back all the results that match.
Shannon: So that’s why whenever we use Google it’ll say, you know, it’ll give you whatever kind of output its able to find for all those search queries. And then up at the top it’ll be like, “we also found these search queries for google and IO.”
Fr. Robert: Right, it contains the string right. “Did you mean blah blah blah?” and that’s all the regular expression. In fact we’ve got Dex from the chatroom saying hey, regx is great for spam filtering email. Absolutely. We know the phrases that spammers use. Right. So you have spam filters that are searching the entire stack of emails for particular combinations that we know to be used in spam emails. And then we set aside that entire email. So it’s fantastically useful. Even if you don’t exactly know how it works yet. You should understand that in your daily life, you do anything on the internet, you’re using regular expressions.
Shannon: Oh, that’s cool. Yay backend! Understanding.
Fr. Robert: Yay, yay, yay. Now here’s the thing, what we need to be able to do is tell you not only why regular expressions are useful, why they’re important, but we know we’ve got to get people some syntax right? I mean you used it in yours.
Shannon: I did, I used some syntax.
Fr. Robert: But we don’t want people to think it’s this magical line you put that there and that’s why it works and it brings back good things.
Shannon: No, but that always works for me.
Fr. Robert: That always works for you but it won’t necessarily always work for our audience. Which is why, in just a second we’re going to bring in our code warrior Patrick Delehany. What he’s going to do is he’s actually going to sit us down and he’s going to guide us through step by step, what a regular expression contains, what it looks like, and the different operators that we can use within a regular expression. Does that sound like something we want to do?
Shannon: Awesome. Yes that sounds great! I’m so excited.
Fr. Robert: And it’s also, you know, this is what our audience wants. Their feedback…
Shannon: Well if you better understand something, obviously it’s going to make you a lot smarter whenever you have to deal with those kinds of things.
Fr. Robert: Absolutely. Yes. You know what else makes you smarter?
Shannon: What makes- everything?
Fr. Robert: Well, no I, specifically what makes you smarter is doing the same amount of work but with less work.
Shannon: Oh, yeah. I like being able to do that.
Fr. Robert: Smart people, that’s like the definition of smart.
Shannon: Do you have something that will save me some time?
Fr. Robert: Yeah, I think I do. I think I do because you’re a citizen of the internet right?
Shannon: Yes I am.
Fr. Robert: So you like domains, right?
Fr. Robert: And you know that domains are important right?
Shannon: I Like domains.
Fr. Robert: Is there anything more frustrating than not getting the domain that you want?
Shannon: Ugh! Yeah, that’s happened to me.
Fr. Robert: Or having to create that super lame extra name.
Shannon: Oh totally!
Fr. Robert: Like, let’s say, I want my website to be called snubs! And oh, its snubs235.
Shannon: Snubs is taken.
Fr. Robert: Very good. Actually. Thank you. Snubs is taken. But no, folks. What I’m talking about, I’m talking about a company. A sponsor of Coding 101 that’s going to help you cut your work down when you’re looking for domains.
Fr. Robert: It’s Hover. Now you want to secure a domain for your great idea. You want something catchy and memorable to represent your online identity. Hover gives you exactly what you need to get that done. You’ll find your perfect domain for your idea so you can get started working on it and move in to the next thing on your to do list. Now people love Hover folks. There they’re a two cows company. This goes way, way back. If you’re a geek you know about this company. When you’re looking for the best place to register a domain name you asks the people who know a lot about domains. Now geeks, developers, designers and programmers all love hover because they know that they’ll have the best tools and support. But you don’t have to be an expert to get a domain name. The surface is simple enough to use that you’ll be comfortable figuring it out by yourself. And the support team is always ready to give you a hand if you need it. Now hover, their thing is that they take all the hassle and friction out of registering a domain. They give you easy to use powerful tools to manage that domain so anyone can do it. And they also get you the perfect domain. Not that junky one, that sort of a second or third choice. But it lets you get the one you want and start building your web presence right away to take control of what people find when they search for you using regular expressions. Or for your business online. Now it’s easy, all you have to do is search for a few keywords and hover will show you the best available options and suggestions. Again this is one of those services that you know, you don’t necessarily have to know exactly what you want, you just have to tell hover what you want to represent and they’ll give you that match. They have a clean and simple website. In less than five minutes you can find the domain name that you want and get it running. And they’ve got a huge variety of domain extensions like .com, .net and country codes to best suit your needs. So you can get, oh, I don’t know, dot just about anything. They also offer valet transfers to make the process painless if you’ve already got your domain registered elsewhere. For free. Hover will take care of the entire process for you and let you know when your domains are settled in your hover account. They’ll transfer all your dns settings or anx settings no matter how many domain names you have. It’s no additional cost. Well folks, the big thing for me is honesty. I want some place that’s honest and that’s hover. They don’t believe in heavy handed up selling or charging you for something that should be part of your service. They include everything you need with your domain. No more and no less. Including a custom email, even for crankyhippo. You’ll get a smart control panel so you can do what you want with your domain with a click of a button. And privacy is included free. On every domain that supports it. So if you ever need a hand you know that hover is going to be there because they have the best customer service around. And now hover offers volume discounts. They’ll give you a discount on your domain renewal. Starting at just 10 domains and going up in value from there. The idea is the more domains you have in your account, the less you should have to pay to renew them. So here’s what we want to do folks. We want you to try hover. We want you to see if it’s as easy for you, for me, for Shannon, for crankyhippo, as it is for the rest of the world. Visit hover today to register your domain name and for 10% off your first purchase, go to hover.com and use our promo code “C101”. We thank hover for their support of Coding 101.
Shannon: We should not allow Brian behind there.
Fr. Robert: We really shouldn’t. This is what happens when you let your TD run free.
Bryan: It actually was our code warrior who was in charge of that.
Fr. Robert: Oh, that was, OK, see this is what we- you know what this is as a good time as any to bring our code warrior back in. fresh from his trip to Tahiti.
Patrick Delahanty: Tahiti?
Fr. Robert: Its Mr. Patrick Delahanty folks. He’s one of the engineers- programmers here at twit TV and he’s our Perl guru.
Patrick: Yes, Tahiti is a magical place.
Fr. Robert: Also known as Petaluma.
Shannon: They’re so similar to each other.
Fr. Robert: Now Patrick, I know that you went regular expressions- we went over regular expressions. Really quickly in episode 2, let’s slow down just a tiny bit, you know. Go over every nook and cranny. They know the theory, they understand what it is, but now we need to show them exactly how it works in Perl.
Patrick: Yeah, I wouldn’t say we went over it, we just kind of touched on it.
Fr. Robert: We used it.
Patrick: And this episode and the next one are all things with regular expressions.
Fr. Robert: Wait, wait, why would we do that? Why would we dedicate two episodes to regular expressions?
Patrick: Because there is so much to do with it. And yeah. It’s kind of confusing but you can search on it, you can replace, and yeah.
Shannon: Oh wow. Well that’s good. I want to make sure that I get it down before we actually move on to harder stuff.
Fr. Robert: Yeah.
Patrick: Alright, so I’ve got, last week I had the code. And I’ll just run it now. The one where you entered the name of your favorite animal.
Fr. Robert: Bunny.
Patrick: Yeah, donkey. Wait, remember this, you said donkey. Okay whatever. Well I’ve modified this. And ill actually run it again, this time I’ll say “My favorite animal is cat”. You said rabbit.
Fr. Robert: What?
Patrick: So I used a regular expression. This will give you another hint of how I did this. My favorite animal: thundercat. You said thunderrabbit. So in this, I’ve used a regular expression to modify any time anybody enters “cat”. To replace it with rabbit. So if I do it again, I say…
Fr. Robert: Oh no, oh boy.
Patrick: There we go. I said “Sarah Lane likes Cats” and it comes out “Sarah Lane likes rabbits”.
Fr. Robert: Okay, now Patrick, I’ve got to ask, it’s a cool example, but would this actually be useful in the real programing world?
Patrick: Oh absolutely. You maybe, normalizing some data, you might want to say okay, they’ve entered this, I want to replace any time this has been entered, with this. Let’s say that they’ve entered something with those smart quotes, you can replace it with normal quotes. You can search for those smart quotes and replace it with normal ones.
Shannon: That’s so handy.
Fr. Robert: Now I get it. It’s useful. Alright, so tell me how this works.
Patrick: Okay, if you look at the code here, this is pretty much the same program we had the last time. But here, I’ve added this search and replace line. This one line. It says- it takes the input which is “animal” and then it has this =~ but then it has the s/ which tells it search and this is going to be a search and replace. So I’m searching for cat, replacing it with rabbit. And the gi, its global and case insensitive, just like before. And down here we have the if statement, this is the same as last week. I haven’t modified that at all. So we’re still looking for if it says bunny or if it says rabbit it says you said animal.
Fr. Robert: Okay, Patrick let me ask you this. I see how this works. So let’s go up a line to animal is = to s/cat/rabbit/gi. Alright, I understand cat/rabbit. Cat is what it’s searching for, rabbit is what it’s going to replace it with. I understand g, so it’s looking through everything. It’s global. And I is the case, correct?
Fr. Robert: Okay, but whys? Why do you have to specify search in this line, but you don’t have to do it in the next line with the if stantement?
Patrick: Because here it’s telling Perl that it’s a search and replace, whereas down below it’s just checking to see if it’s in here.
Fr. Robert: Oh!
Patrick: So up here, we have to tell it, this s/ because we’re saying, okay, this is going to look for something and immediately replace it with this other thing.
Fr. Robert: Got it.
Patrick: Down here we’re just looking for that thing. We didn’t do anything.
Fr. Robert: So without the s, it’s just a standard search. To see whether or not that particular string is there. If you add the s, it’s going to search and then it’s going to replace whatever it finds.
Patrick: Yes. And so we’ve got two- I mean this is all still regular expressions. This is just two ways to handle it. And but you can do a lot more complicated things with- you don’t have to put in the actual words. You can do other things. And I’ve got a couple examples of those. If we’re ready to move on to that. Do you have any other questions about this before we take another step?
Shannon: I do. Could I put the g and I before cat and rabbit and would it still work?
Patrick: Uh, no that wouldn’t work.
Fr. Robert: So what’s the particular syntax you have to use? I mean I get why it’s working the way you put it, but for the folks at home who are doing this for the first time, would we want to move them past the black box stage. Is there a particular pattern that they have to follow when they want to start doing, using regular expressions?
Patrick: Basically what they would do is they would always have the =~, and that tells it that it’s going to be a regular expression thing. And then if it’s an “if” statement, you’re only looking to see if the string is inside, or the string contains that word. So you wouldn’t do a search and replace. So you’d have like, “/padre/” like that.
Fr. Robert: Don’t search and replace Padre.
Patrick: So this would be searching for “padre” within a string. And then at the end, the g is search the entire string. Or just find it once. And then the I is case insensitive. So if I had lowercase padre, uppercase. Doesn’t matter. Now if I put this here, this tells Perl that okay, I need to look for something and replace it with whatever is after that.
Fr. Robert: So I need to tell it what to replace it with. Like snubs of course. Replace padre with snubs.
Patrick: So you couldn’t just put the gi there, because it would say okay this is not valid. There’s nothing…
Shannon: So it’s thinking that you want to replace it with “gi”.
Patrick: Yeah. Even highlighting here, it’s like “okay, well this isn’t done yet.” So I would replace it with =~ s/Padre/Snubs/gi
Fr. Robert: Naturally.
Patrick: And then, it would be that. And so this would say okay, the whole string in whatever the case, replace padre with snubs.
Fr. Robert: Okay, now I understand why global case insensitive is there, and why it’s useful. Where would you leave it off? Where is there a case where you wouldn’t want it to be global and you wouldn’t want it to be case insensitive?
Patrick: In the search and replace the global comes into play a lot more often, because if I left that out, it would only replace the first occurrence.
Fr. Robert: Okay.
Patrick: So if I- actually let me make that change. I’ll put, I haven’t tried this, let’s hope this works. Favorite animal, cat. And cat, and dog. And cat. You said, so see it only replaced the first one. You said rabbit, and cat, dog and cat. But if I modify this again and put the g, it should globally replace- and cat and cat and cat and dog.
Fr. Robert: Right.
Shannon: Oh, cool.
Patrick: Rabbit and rabbit and rabbit and dog.
Fr. Robert: And just for kicks and giggles, I think we should show them what happens if you take out the caps insensitivity and then add a couple of caps. Just so they understand why that’s in there.
Patrick: Oh sure. So well take that case insensitivity out. Now it’s case sensitive. So I’ll put CAT and cat and CAtttt and Thundercat. So it replaced the second one, because it had, it was all lowercase. It didn’t touch the third and the fourth one, cat was part of the phrase, so it replaced that part.
Fr. Robert: So hopefully the folks at home will see what those qualifiers do. You put that in there, you put the G for the global. When you want to do a search beyond just a single term. And you always have to make it case insensitive unless you only want to replace or search for exact, exact capitalization match.
Shannon: I only want exact kitties.
Fr. Robert: Thank you. Alright, so let’s move on. What else have you got?
Patrick: I have another example here, lets run this. Here we go. This is, what is your favorite movie quote?
Fr. Robert: Get your ass to mars.
Patrick: Get your ass to mars.
Fr. Robert: Sorry, I’m in Arnold mode.
Patrick: and so what I did here was I replaced all the spaces with new lines. So if you look at the code here, this is very simple.
Fr. Robert: Okay.
Shannon: What? That doesn’t look very simple.
Patrick: I’ve got a regular expression here. It’s the same thing. Previously this said cat, and this said bunny. But what I’m doing here is, I’ve got this backslash s, and then backslash n. and as we’ve discussed. We’ve talked about what \n does, and that’s new line.
Fr. Robert: We know what the first s does. We know we’re going to be doing some search and replace. We know what the g does, we know it’s going to be global, but now you’ve got this smiley face in the middle Patrick. What are you trying to pull?
Patrick: this \s, and it’s a backlash, not a slash. But that is a regular expression term to search for a space.
Patrick: So this is looking for any space in the string. And the /g tells it all of the spaces in the string. And it’s replacing all of those spaces with \n which is a new line.
Shannon: Oh that’s cool.
Patrick: And so then they just printed out. I’ve got this space here with three dashes. A new line. And then I print the quote.
Fr. Robert: That’s actually, that’s phenomenally, phenomenally important to be able to do. Because you just gave me a way to take a sentence from someone and divide it up into its component parts.
Fr. Robert: That’s amazing. That’s- and actually I can think of a very simple program that we could give people, which would be to use this function to do a counter. To find out how many words are in a paragraph. That would be something perfect. Because you could use that to separate it out into its pieces, and then count the pieces.
Patrick: Yes. You could easily do like and if statement. I mean, I did a search and replace but you could say, if quote contains a space, then do something. So do something here. And so that means oh you entered a space. And think of how you could use this to say oh wait, you entered an email address with a space, that’s not valid. And so you can, there are all sorts of error checking that can be based off of this too.
Shannon: Oh that’s cool. You could do that on a, if a person enters a phone number incorrectly or social security number.
Patrick: You can use this to strip out spaces from a phone number. Like up here I’ve got the replace it with a \n. if I just leave that blank, it’s stripping all the spaces out.
Fr. Robert: The other thing that you could do Patrick, you don’t have to strip out the spaces. Like for example, let’s say that you wanted to take out periods. For example, someone types out their phone number with 202. Blah blah blah. Blah blah blah. You could use this to just strip out the periods so you get nothing but the numbers.
Patrick: Yes. But you have to be careful about the non-alphanumeric characters in regular expressions. If I just put a period.
Fr. Robert: Right.
Patrick: That is actually a special character for regular expressions. A period matches any character.
Fr. Robert: We would have to give it the character code so it knows what to look for.
Patrick: Yes, so if I did, let me say I did…
Shannon: So that kind of reminds me of wild cards.
Fr. Robert: It does kind of, right? So you’re doing a search and replace on Shannon.Morse…
Patrick: Shannon any character Morse. And replace it with Snubs.
Fr. Robert: Oh, l like that. Okay, so any time you see Shannon Morse, you’re going to replace it with Snubs.
Patrick: Yeah. So if I ran this, id type “Shannon Morse” it will type “snubs”. If I run it again I type “Shannon1Morse”. Snubs. It matches. And it replaces it with that. So yeah, the period is literally any character. So the way around that would be to put a backslash before it, and now it knows okay, it’s just period. So now when I enter something it’s going to take all the periods out. \. It’s going to look for just the actual period. The dot. And replace it with nothing. So if I run this again. Okay. So I’m going to look for anything with periods. So let’s just enter a phone number, we’ll have 207.786.2411
Fr. Robert: That’s my phone number.
Patrick: That’s time and temperature in Lewiston Maine. So we’ll take that, replace it. It takes out all the dots.
Fr. Robert: Cool.
Shannon: Oh, that’s so handy! I love it.
Fr. Robert: Yeah. Now folks, now you should be able to see the utility of doing this. What we’re talking about is data sanitation. We’re making the data the way we want it so that we can run it through some program that makes it useful.
Patrick: And because it’s looking specifically for periods, when I put in the dash, it doesn’t do that.
Shannon: Right. That makes sense.
Fr. Robert: But you could write another regular expression that takes away the dashes. That takes away strange characters that people might put in.
Patrick: Yeah, I could. Like parentheses. Speaking of strange characters, we could do, like you saw the matching on space. We could so capital s for non-space. So that means any characters I’ve entered that aren’t a space. Or aren’t a new line.
Fr. Robert: Got it.
Patrick: Anything that is visible. Really.
Shannon: The s is for strange?
Patrick: Capital ones are for non whatever. A lowercase is for that. So capital S is for non-space. S is for space. D is digit. So 0-9. So I could search for any digits and remove them. Capital D is non digit. So abc-. Whatever. And then W is for letters and numbers. Alphanumerics. So this would match a-z and 0-9. But it wouldn’t match +$ and stuff like that. Exclamation mark.
Fr. Robert: I think at this point, now that they understand what regular expressions are and how they use them. I think that what we need to do is recommend that they find an online listing of all the different regular expression modifiers that you can use in order to get what you want. We’ve got a lot of questions in the chat room from people who are asking “well can you use this to get rid of double characters?” yes you can. You just need to figure out exactly how the process is going to work. Can I use it to get rid of parentheses. Of course you can. Again, it’s all going to come down to problem solving. Now that you know what regular expressions do, and what they can do. You have to figure out how to make them solve your problem.
Patrick: Yes, nice. There’s another thing I want to point out here. I had this \s. if we put a + after it, that means it has to find at least one, but if there’s more than one it’ll match that too. So this would take multiple spaces. So if I had, =~ s/Shannon\s+Morse//g; If I had one space in there, or 100 spaces, it would replace them all. It would match that.
Fr. Robert: Fantastic. Now Patrick, I got to ask, we want to cover more regular expressions next week, but what else is left? It would seem as if you’ve given us the basics. You’ve given us enough to get working. What else do we need to know?
Patrick: Well there’s a lot more with regular expressions that we can cover. Including how to actually take something that’s matched and include it in the response. So we could take- I’ll get into it next week. But also I wanted to cover probably the most useful line of Perl that you can ever use. And even if you don’t plan to do Perl programming beyond this module, you’ll still use this line for years to come. It’s a search and replace with Perl. A command line. And it’s the most useful line I’ve ever learned of any programming and I can’t wait to show it.
Shannon: Oh, gosh.
Fr. Robert: Oh, boy. That’s not a tease at all. Patrick we want to thank you so very much for being our code warrior, and thank you for bringing some sanity to regular expression. Because any time we can bring it out of the black box and actually show people how to create these expressions rather than just using the ones that we give them, that’s always a good thing. So thank you so very much. Can you tell the folks at home where they can find you?
Patrick: You can find me, I’m on twitter @PDelahanty and again my website, Animecons.com and fancons.com all written in Perl.
Fr. Robert: Now, speaking of things written in Perl, you will be able to find all of the notes from today’s show eventually at our show notes page. We’ll give you the link to wherever we’re going to end up holding those nice juicy tidbits. And where can you find our show notes page?
Shannon: That’s over at twit.tv/code. Yay.
Fr. Robert: Yeah. Yeah. You can also find us on YouTube. You’re going to find us at youtube.com/twitcoding101. There you will be able to find all of our episodes and like for example when we do the special episodes with Jo Heck, you’re definitely going to being able to find that up there. It’s a nice place for you to go and just speed through if you’re ever looking for a reference point.
Shannon: Yes, and I also create a playlist on there so it’s really easy to open up a module playlist and go straight through it if you want to watch episodes 1-8 of a specific programming language. Also, we’re still on ITunes. We’re till one of those top rated shows on ITunes. At least I hope we are. So subscribe if you haven’t already. Definitely check it out over there and of course you can always download it from twit.tv/code as well.
Fr. Robert: Yes you can. Speaking of twit coding. You need to be part of the twit coding G+ community. Go to Plus.google.com/twitcoding101. There you will find over 1000 of our community members. The people who do this for a living. Who want to do it for a living. Or for the people who just want to figure out how coding works. Become part of the community, ask questions, give answers, be part of the awesomeness that is twit coding 101.
Shannon: Yes absolutely. And also, send us your code examples, because I love to show them off on the show and they also help me learn as well. So I really appreciate everyone who sends us their examples. And last but not least we’re also on twitter. What’s your twitter?
Fr. Robert: You can find me at @padresj that’s the little at symbol, padresj.
Shannon: And mine’s easy. Its @snubs.
Fr. Robert: Woo-hoo. And always, we do this show every week, live Thursdays 1:30pm pacific time. PDT. So join us at live.twit.tv. You get to see the pre-show the post show and any bloopers that we may cut out of the regular edit.
Shannon: Like him for forgetting to shut off his mike when he goes to the potty. So gross.
Fr. Robert: Yeah. I did that. And as long as you’re going to be part of the pre-show and post show, why not join us on our chat channel. Irc.twit.tv we pull people straight out of the chatroom.
Fr. Robert: Literally, like they’re back here and we pull them out. But it’s one of the things that we do. It’s an experiment in the wonderful community on the interwebs.
Shannon: I think that’s about it for today. I’m excited for next week though, I can’t wait.
Fr. Robert: That’s about it. Yeah. I am yeah. I want the super-secret Patrick Delahanty tease me about Perl going to change my life on programming thing. But until that time, I am Father Robert Ballecer.
Shannon: I’m Shannon Morse.
Fr. Robert: End of line.