I thought of another handy scenario for using regular expressions in Postgres. This time not within the conditions, but in the returned results. Lets say for instance you have a column with URL, (maybe blog comments or something) and you would like to get a list of all the domain names, not the full paths trailing it nor the http://, how would you do that? Without regular expressions you would be forced to use a combination of various string functions to look for the domain name, and you will also aquire a headache free of charge. However with a simple regular expression you could do something like this:
select SUBSTRING(url FROM 'http://([^/]*).*') as domainname from my table
Pretty simple you must admit. Ok, so that is pretty straight forward. Now lets say we wanted to scan a column for any phone numbers. I’ll keep the phone number regular expression simple for this example. The phone number is 10 numbers, with only a possible dash after the third and sixth numbers.
select SUBSTRING(colname FROM '([0-9]{3}\-?[0-9]{3}\-?[0-9]{4})') as numstr from tablename
Ok, now one final scenario. We are still looking for a phone number, but there could be more than one per column. We would like to find them all! Well, there’s a regex for that.
select regexp_matches(colname, '([0-9]{3}\-?[0-9]{3}\-?[0-9]{4})', 'g') as numstr from tablename
Now you can see we’ve changed up our substring function to regexp_matches, which will give us the ability to search for all matches. I’m sure most everyone is familar with a regular expression matching function so this is nothing new. You can find more information on using these functions in the Postgres Docs. Hope you’ve enjoyed more Regular Expressions with Postgres!
Related posts:




2 Responses
sam
24|Feb|2010i can see this being helpful for reporting type utilities too. i often forget regular expressions can be used for searching, not just validation.
Eric
12|Jul|2011THANK U SO MUCH!