I’m embarrassed that I am only finding out about these two functions six years after they were introduced. I was using reFind() and looping over the len and pos arrays as recently as this month!
Posts Tagged ‘regular expressions’
ColdFusion Regular Expressions – REMatch() and REMatchNoCase()
Posted by David Faber on March 30, 2013
Posted in ColdFusion | Tagged: ColdFusion, regex, regular expressions | Leave a Comment »
Oracle: SEO-Friendly URLs II
Posted by David Faber on March 15, 2013
I posted over a year ago about how one might use regular expressions in Oracle to return SEO-friendly URLs in queries. The query I came up with at the time looked something like this:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads , REGEXP_REPLACE(REGEXP_REPLACE(LOWER(title), '[^-a-z0-9/ ]', ''), '[/ ]', '-') AS url_keyword FROM articles
Since then, I’ve been looking into regular expressions quite a bit. One difficulty with the expression above is that multiple characters will be replaced with multiple hyphens, plus other punctuation will be ignored — they will simply be replaced with nothing. Another, perhaps more obvious difficulty is its complexity! A better approach would be the following:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads
, REGEXP_REPLACE(LOWER(title), '[^a-z0-9]+', '-') AS url_keyword
FROM articles
This simply replaces consecutive non-alphanumeric characters with a single hyphen. Since Oracle supports the POSIX character classes in regular expressions, the above could also be written:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads
, REGEXP_REPLACE(LOWER(title), '[^[:alnum:]]+', '-') AS url_keyword
FROM articles
where [[:alnum:]] is the POSIX character class for alphanumeric characters and [^[:alnum:]] is its negation. A third option, if you know your data has no underscores or want them to be preserved for some reason (and not transformed into hyphens) would be the following:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads
, REGEXP_REPLACE(LOWER(title), '\W+', '-') AS url_keyword
FROM articles
Posted in Oracle, SQL | Tagged: Oracle, regex, regular expressions, search engine optimization, SEO, SQL | Leave a Comment »
Oracle: Friendly URLs
Posted by David Faber on January 3, 2012
On the one hand, we want to avoid hitting the database if we don’t have to. On the other hand, if we can use built-in functions in our queries, this can be preferable to manipulating the data after it’s been returned from the database. For example, writing this:
SELECT emp_id, INITCAP(fname) AS fname, INITCAP(lname) AS lname FROM emp
is certainly* better than writing this:
SELECT emp_id, fname, lname FROM emp
and then using your development tool to capitalize the names after the data have already been returned (in CF it would look something like this: ucase(left(fname, 1)) & lcase(mid(fname, 2, len(fname) – 1)) – clunky!!).
*As long as your database queries need not be portable.
A better example still would be the following:
SELECT emp_id, COALESCE(dept_id, 0) AS dept_id FROM emp
instead of:
SELECT emp_id, dept_id FROM emp
With the latter I have to check to see if dept_id is non-null before displaying, while with the former I can simply display as-is.
What does this have to do with friendly URLs? Friendly as in SEO-friendly. The URL is very important in search engine optimization. Suppose we have a table of articles as in a previous post:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads FROM articles
We would like to have the article’s title in the URL. The conventional wisdom is to use hyphens (-) as word separators. We also don’t want any weird characters that are going to be url-encoded. The solution (or, at least, “a” solution) is to use regular expressions to get rid of unusual characters and replace spaces with hyphens. And here Oracle is truly our friend:
SELECT id, title, description, pubdate, journal_name, author_name, num_reads , REGEXP_REPLACE(REGEXP_REPLACE(LOWER(title), '[^-a-z0-9/ ]', ''), '[/ ]', '-') AS url_keyword FROM articles
The inner REGEXP_REPLACE replaces every character that is not (a) alphanumeric, (b) a space, or (c) a hyphen or forward slash with a null string. The outer one replaces forward slashes and spaces with hyphens. What is left over is bunches of alphanumeric characters (hopefully, words) separated by hyphens – in other words, an SEO-friendly URL string.
Posted in ColdFusion, Oracle, SQL | Tagged: Oracle, regular expressions, search engine optimization, SEO, SQL | 1 Comment »
