Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


12.5.2 正規表現

表 12.9 文字列正規表現演算子

名前 説明
NOT REGEXP REGEXP の否定
REGEXP 正規表現を使用したパターン一致
RLIKE REGEXP のシノニムです

正規表現は、複雑な検索でパターンを指定する強力な方法です。

MySQL では、POSIX 1003.2 に準拠することを目的とした Henry Spencer 氏による正規表現の実装が使用されます。MySQL では、SQL ステートメントで REGEXP 演算子とともに実行されるパターンマッチング演算をサポートするために、拡張バージョンが使用されています。

このセクションでは、MySQL の REGEXP 演算で使用できる特殊な文字や構造を例を示して要約しています。Henry Spencer 氏の regex(7) マニュアルページで検索できる詳細がすべて含まれているわけではありません。そのマニュアルページは、MySQL のソース配布の regex ディレクトリにある regex.7 ファイルに含まれています。セクション3.3.4.7「パターンマッチング」も参照してください。

正規表現演算子

  • expr NOT REGEXP pat, expr NOT RLIKE pat

    これは、NOT (expr REGEXP pat) と同じです。

  • expr REGEXP patexpr RLIKE pat

    パターン pat と比較して、文字列式 expr のパターン一致を実行します。パターンは、拡張正規表現にすることができます。構文については、このセクションの後半で説明します。exprpat と一致する場合は 1 を返し、それ以外の場合は 0 を返します。expr または pat のいずれかが NULL である場合は、結果も NULL になります。RLIKE は、mSQL との互換性を確保するために用意された REGEXP のシノニムです。

    パターンはリテラル文字列である必要はありません。たとえば、文字列式やテーブルカラムとして指定できます。

    注記

    MySQL では文字列で C のエスケープ構文 (たとえば、改行文字を表すために \n) が使用されているため、REGEXP 文字列で使用される \ はすべて二重に指定する必要があります。

    REGEXP では、バイナリ文字列で使用される場合を除いて、大文字と小文字が区別されません。

    mysql> SELECT 'Monty!' REGEXP '.*';
            -> 1
    mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
            -> 1
    mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
            -> 1  0
    mysql> SELECT 'a' REGEXP '^[a-d]';
            -> 1
    

    REGEXP および RLIKE では、文字の型を決定する際および比較を実行する際に、引数の文字セットおよび照合順序が使用されます。引数にさまざまな文字セットまたは照合順序が含まれる場合は、セクション10.1.7.5「式の照合順序」で説明するとおりに、型変換属性ルールが適用されます。

    警告

    REGEXP および RLIKE 演算子はバイト単位で機能するため、マルチバイトセーフではなく、マルチバイト文字セットを使用すると想定外の結果が生成される可能性があります。さらに、これらの演算子ではそのバイト値に基づいて文字が比較されるため、アクセント記号付き文字は、指定された照合順序では等しいとみなされた場合でも、等しいとして比較されない可能性があります。

正規表現の構文

正規表現では、文字列のセットが記述されます。もっとも単純な正規表現は、特殊文字を使用していないものです。たとえば、正規表現 hellohello にのみ一致します。

重要な正規表現では、複数の文字列に一致できるように特定の特殊構造が使用されます。たとえば、正規表現 hello|word は、文字列 hello または文字列 word に一致します。

さらに複雑な例として、正規表現 B[an]*s は、文字列 BananasBaaaaasBs のいずれか、および B で始まり、s で終わり、その間に任意の数字の a または n 文字が含まれるその他の文字列に一致します。

REGEXP 演算子の正規表現では、次の特殊文字および構造のいずれかが使用される場合があります。

  • ^

    文字列の先頭に一致します。

    mysql> SELECT 'fo\nfo' REGEXP '^fo$';                   -> 0
    mysql> SELECT 'fofo' REGEXP '^fo';                      -> 1
    
  • $

    文字列の末尾に一致します。

    mysql> SELECT 'fo\no' REGEXP '^fo\no$';                 -> 1
    mysql> SELECT 'fo\no' REGEXP '^fo$';                    -> 0
    
  • .

    任意の文字 (復帰改行および改行を含む) に一致します。

    mysql> SELECT 'fofo' REGEXP '^f.*$';                    -> 1
    mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';                -> 1
    
  • a*

    ゼロ個以上の a 文字のシーケンスに一致します。

    mysql> SELECT 'Ban' REGEXP '^Ba*n';                     -> 1
    mysql> SELECT 'Baaan' REGEXP '^Ba*n';                   -> 1
    mysql> SELECT 'Bn' REGEXP '^Ba*n';                      -> 1
    
  • a+

    1 個以上の a 文字のシーケンスに一致します。

    mysql> SELECT 'Ban' REGEXP '^Ba+n';                     -> 1
    mysql> SELECT 'Bn' REGEXP '^Ba+n';                      -> 0
    
  • a?

    ゼロまたは 1 個の a 文字に一致します。

    mysql> SELECT 'Bn' REGEXP '^Ba?n';                      -> 1
    mysql> SELECT 'Ban' REGEXP '^Ba?n';                     -> 1
    mysql> SELECT 'Baan' REGEXP '^Ba?n';                    -> 0
    
  • de|abc

    シーケンス de または abc のいずれかに一致します。

    mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
    mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
    mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
    mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
    mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
    mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0
    
  • (abc)*

    シーケンス abc のゼロ個以上のインスタンスに一致します。

    mysql> SELECT 'pi' REGEXP '^(pi)*$';                    -> 1
    mysql> SELECT 'pip' REGEXP '^(pi)*$';                   -> 0
    mysql> SELECT 'pipi' REGEXP '^(pi)*$';                  -> 1
    
  • {1}, {2,3}

    {n} または {m,n} 注釈では、パターンの前の原子 (または部分) の数多くの出現に一致する正規表現を記述するより一般的な方法が提供されます。m および n は整数です。

    • a*

      a{0,} と記述できます。

    • a+

      a{1,} と記述できます。

    • a?

      a{0,1} と記述できます。

    より厳密に言えば、a{n} は、a の正確に n 個のインスタンスに一致します。a{n,} は、an 個以上のインスタンスに一致します。a{m,n} は、am 個から n 個までのインスタンスに一致します。

    m および n は、0 から RE_DUP_MAX (デフォルトは 255) までの範囲内である必要があります。m および n の両方が指定されている場合は、mn 以下にする必要があります。

    mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';              -> 0
    mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';              -> 1
    mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';           -> 1
    
  • [a-dX], [^a-dX]

    abcd、または X である (^ が使用されている場合はそれ以外の) 任意の文字に一致します。2 つの文字の間の - 文字によって、1 番目の文字から 2 番目の文字までのすべての文字に一致する範囲が形成されます。たとえば、[0-9] は任意の 10 進数に一致します。リテラル文字 ] を含めるには、左括弧 [ の直後に記述する必要があります。リテラル文字 - を含めるには、先頭または末尾に記述する必要があります。[] ペアの内側に定義された特殊な意味を持たない文字は、それ自体としか一致しません。

    mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]';                 -> 1
    mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$';               -> 0
    mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';              -> 1
    mysql> SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';             -> 0
    mysql> SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';            -> 1
    mysql> SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';           -> 0
    
  • [.characters.]

    ([] を使用して記述された) 括弧式内で、その照合要素の文字シーケンスに一致します。characters は、単一の文字または newline などの文字名です。次の表には、許可されている文字名を一覧表示します。

    次の表には、許可されている文字名および一致する文字を表示します。数値として指定された文字では、値が 8 進数で表記されます。

    名前 文字 名前 文字
    NUL 0 SOH 001
    STX 002 ETX 003
    EOT 004 ENQ 005
    ACK 006 BEL 007
    alert 007 BS 010
    backspace '\b' HT 011
    tab '\t' LF 012
    newline '\n' VT 013
    vertical-tab '\v' FF 014
    form-feed '\f' CR 015
    carriage-return '\r' SO 016
    SI 017 DLE 020
    DC1 021 DC2 022
    DC3 023 DC4 024
    NAK 025 SYN 026
    ETB 027 CAN 030
    EM 031 SUB 032
    ESC 033 IS4 034
    FS 034 IS3 035
    GS 035 IS2 036
    RS 036 IS1 037
    US 037 space ' '
    exclamation-mark '!' quotation-mark '"'
    number-sign '#' dollar-sign '$'
    percent-sign '%' ampersand '&'
    apostrophe '\'' left-parenthesis '('
    right-parenthesis ')' asterisk '*'
    plus-sign '+' comma ','
    hyphen '-' hyphen-minus '-'
    period '.' full-stop '.'
    slash '/' solidus '/'
    zero '0' one '1'
    two '2' three '3'
    four '4' five '5'
    six '6' seven '7'
    eight '8' nine '9'
    colon ':' semicolon ';'
    less-than-sign '<' equals-sign '='
    greater-than-sign '>' question-mark '?'
    commercial-at '@' left-square-bracket '['
    backslash '\\' reverse-solidus '\\'
    right-square-bracket ']' circumflex '^'
    circumflex-accent '^' underscore '_'
    low-line '_' grave-accent '`'
    left-brace '{' left-curly-bracket '{'
    vertical-line '|' right-brace '}'
    right-curly-bracket '}' tilde '~'
    DEL 177    
    mysql> SELECT '~' REGEXP '[[.~.]]';                     -> 1
    mysql> SELECT '~' REGEXP '[[.tilde.]]';                 -> 1
    
  • [=character_class=]

    ([] 使用して記述された) 括弧式内の [=character_class=] は、等価クラスを表します。これは、同じ照合順序値を持つすべての文字 (それ自体を含む) に一致します。たとえば、o および (+) が等価クラスのメンバーである場合、[[=o=]][[=(+)=]]、および [o(+)] はすべてシノニムです。等価クラスは、範囲の終点として使用できない場合もあります。

  • [:character_class:]

    ([] を使用して記述された)括弧式内の [:character_class:] は、そのクラスに属するすべての文字と一致する文字クラスを表します。次の表には、標準のクラス名を一覧表示します。これらの名前は、ctype(3) のマニュアルページで定義されている文字クラスを表しています。特定のロケールでは、ほかのクラス名が提供される場合もあります。文字クラスは、範囲の終点として使用できない場合もあります。

    文字クラス名 意味
    alnum 英数文字
    alpha アルファベット文字
    blank 空白文字
    cntrl 制御文字
    digit 数字文字
    graph 図形文字
    lower 小文字アルファベット文字
    print 図形または空白文字
    punct 句読点文字
    space 空白、タブ、改行、および復帰改行
    upper 大文字アルファベット文字
    xdigit 16 進数文字
    mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+';       -> 1
    mysql> SELECT '!!' REGEXP '[[:alnum:]]+';               -> 0
    
  • [[:<:]], [[:>:]]

    これらのマーカーは、単語境界を表します。単語の先頭と末尾にそれぞれ一致します。単語とは、前後に単語文字が存在しない単語文字のシーケンスです。単語文字とは、alnum クラス内の英数文字またはアンダースコア (_) です。

    mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
    mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0
    

正規表現で特殊文字のリテラルインスタンスを使用するには、前に 2 つのバックスラッシュ (\) 文字を付けます。MySQL パーサーが 2 つのバックスラッシュの一方を解釈し、正規表現ライブラリがもう一方を解釈します。たとえば、特殊文字 + を含む文字列 1+2 に一致する正規表現は、次のうちで最後のものだけです。

mysql> SELECT '1+2' REGEXP '1+2';                       -> 0
mysql> SELECT '1+2' REGEXP '1\+2';                      -> 0
mysql> SELECT '1+2' REGEXP '1\\+2';                     -> 1

User Comments
  Posted by D. Meanea on May 30, 2003
If you are searching for literal parentheses, you have to enclose each parenthesis in brackets; otherwise, mySQL thinks they're part of the regular expression syntax. For instance:

WHERE phone REGEXP '(435)';

would return any phone numbers that have the sequence 435 in any part of the string, such as "1(801)555-4351". However:

WHERE phone REGEXP '[(]435[)]';

would return only phone numbers with (435), such as "1(435)555-5555".
  Posted by Marcello Alves on June 5, 2003
It's far beyond the scope of this documentation to dwell on all the gory details of regular expressions. Should you have any doubts, please refer to a good book on the subject like "Mastering Regular Expressions" (http://www.oreilly.com/catalog/regex/). References online include http://sitescooper.org/tao_regexps.html and http://www.regexlib.com/
  Posted by a j stiles on November 3, 2003
The regular expression support in MySQL seems to be based on traditional-style regex (like ereg() in PHP), not the more sophisticated regular expression matching found in Perl or PHP's preg_match(). And in case the above doesn't make it clear (being mostly SELECT statements using the function directly to return a 1 or 0), you typically would use the REGEXP function in a WHERE clause like this:

SELECT * FROM foo WHERE bar REGEXP "baz"

To match a "special" character such as $, you need to prefix it with the backslash \ character. So \$ matches an actual dollar sign. However, in almost any programming language that claims a "C-like" syntax, that backslash is likely to get picked up on as a special character. So you may need to use an extra backslash. Also, at least in Perl and PHP, the $ is a special character itself, because it indicates that what follows is a variable name - so it will need a backslash too.

In Perl or PHP, you probably will write something like this to match on a line starting with a $ sign:

$query = "SELECT * FROM `foo` WHERE `bar` REGEXP \"^\\\$\""

I'll explain the special characters in that and what they mean:
backslash, speech mark = a literal speech mark
HAT sign = beginning of line
two backslashes = a literal backslash
backslash, dollar = a literal dollar sign
backslash, speech mark = a literal speech mark

Now if you print $query, it will have the value
SELECT * FROM `foo` WHERE `bar` REGEXP "^\$"
which is what you really want, and how you would type it into the mysql command line. Remember also that PHPMyAdmin expects you to put a backslash before a backslash or apostrophe. So in PHPMyAdmin you would enter
SELECT * FROM `foo` WHERE `bar` REGEXP "^\\$"

I guess if you only want to use . and .* regular expressions, you may as well stick to using LIKE with the _ and % wildcards, as that is probably a bit faster. Finally, when using regular expressions in *any* language you need to watch out, because it is very easy to write ones that will always match, and almost as easy to write ones that will never match anything. So do check!
  Posted by Vaz Aranni on June 30, 2005
Regexp's are pretty complicated. If you need anything more complicated than what's shown above, a good site to learn how to use them is http://www.regular-expressions.info. The sites listed in the second comment are probably a good idea too.

Also, don't get in the habit of using character classes to escape metacharacters (like using [(] to match a literal parenthese). The open parentheses '(' and ')' have no special meaning inside a character class, but others like $ retain their meaning. Using [$] won't match the character '$', it'll still match the beginning of the string.

So escape them properly with backslashes.

So what if your PHP code has something that looks like...

mysql_query("select * from a where Name rlike '(^|//////|)example'")

...just to match a string that starts with "example" or contains the string "|example". It looks terrible and it works.
  Posted by Tony Boyd on October 12, 2005
For those of you struggling to escape special characters with long sequences of backslashes (see Vaz's post), I have to ask: why bother? Why not just use the dot-character syntax mentioned on this very page? For example, I needed to find all the ID attributes in some HTML. I tried escaping single and double-quotes for about 30 seconds, then I just switched to this:

SELECT * FROM site WHERE html REGEXP "id=[[.apostrophe.][.quotation-mark.]]archives[[.apostrophe.][.quotation-mark.]]";

Ta da. No escaping issues.
  Posted by Guido Dieterich on December 20, 2005
This sql statements:

SELECT 'WORD' REGEXP '[[:upper:]]{4}'; # => 1;
SELECT 'WORD' REGEXP '[[:lower:]]{4}'; # => 0
work right only when collate is _cs and NOT _ci (case insensitive)

created tables eg. the collate 'latin1_swedish_ci' have to be changed, if you want to use case sensitive REGEXPs like [[:upper:]] or [[:lower:]]!
ALTER TABLE <name> CONVERT TO CHARACTER SET latin1 COLLATE latin_general_cs

I set in my.cnf now:
[mysqld]
default-collation= latin1_general_cs

#default was latin1_swedish_ci
  Posted by Koy Kragh on March 4, 2006
The above post by Guido Dieterich (about collation and case sensitivity) is a good point. However, there is a way to match in a case-sensitive manner without having to change the collation of your existing tables: use the "BINARY" keyword.

Here's an extended example (based on the one previously posted):

SELECT
('WORD' REGEXP '[[:upper:]]{4}') AS `upper_match`, # this will be a 1
('WORD' REGEXP '[[:lower:]]{4}') AS `lower_match`, # this will be a 1 on an "*_ci" collation
# -BINARY- matches below
(BINARY 'WORD' REGEXP '[[:upper:]]{4}') AS `bin_upper_match`, # this will be a 1
(BINARY 'WORD' REGEXP '[[:lower:]]{4}') AS `bin_lower_match` # this will be a 0 even on an "*_ci" collation
  Posted by Dennis K on November 8, 2006
The query "SELECT * FROM table WHERE text REGEXP 'UPPER'" on a *.ci (e.g. latin1_general_ci) table will find any case insensetive words, even words like "upper" or "uPpOr", or "UpPOr", etc...

To avoid this use one of the following Methods:

SELECT * FROM table WHERE text COLLATE latin1_general_cs REGEXP '...'

OR

SELECT * FROM table WHERE CAST(x AS BINARY) REGEXP '...'

  Posted by richard versloot on May 9, 2007
information on boosting performance of regexp matching would be very welcome (for example: wich index type)
This information can't be find on the dev.mysql.com site.
  Posted by lvaro G. Vicario on October 10, 2007
"To use a literal instance of a special character in a regular expression, precede it by two backslash (\) characters."

If you are coding in PHP and you need to match a literal backslash you can easily end up with an unmaintainable mess of \\\\\\\\'s.

Try to keep it clean applying the appropriate escaping functions:


<?php

$match 
'^' preg_quote('one\\two') . '$';
$sql "SELECT * FROM my_table " .
    
"WHERE my_field REGEXP '" mysql_real_escape_string($match) . "'";

?>


There doesn't seem to be a native quote funcion in MySQL but PHP's preg_quote() apparently works.
  Posted by Carl Longnecker on December 30, 2007
richard versloot-

regular expressions do not utilize indexes. the only way to improve their performance is to write a more efficient expression.
  Posted by Donoiu Cristian on July 3, 2008
Some of the next lines may be true:

-place the fixed/bigger part first or "fail fast", for ex: instead of (e|abcd) use (abcd|e)
-extract similitudes, ex: instead of (abcd|abef) use ab(cd|ef)
-prefere LIKE with % and _ , or string functions if the match is simple
-try to create less cycles(regex use a lot backtracking)!!!

Hope it helps!
  Posted by Alan Ng on November 7, 2009
I can't believe I'm the first to post this solution, since the pain of MySQL's REGEXP not working with multibyte character sets has been expressed all over the Web for years, I see.

Here's my simple workaround, for a database, server, and current connection that are entirely in UTF-8. Of course this only helps the majority of us developers who are in fact dealing with stored data that could just as well have be expressed in latin1:

SELECT * FROM YourTables WHERE (CONVERT (TextField USING latin1)) REGEXP CONVERT ('YourUTF8RegExp' USING latin1))

  Posted by Miklos Kokenyesi on November 30, 2009
Maybe this will be useful for others.
While creating a search function with syntax-highlighting for content which include bulletin board codes ([code], [ul], [li], etc.) I was stuck for a few hours about how to exclude the contents of the BBC tags. For example, if someone search for "ode", the [code] tags won't needed in the result list, not to mention that the syntax highlighting destroyed the html code as well :)

I was only able to do it this way ($search is the search string, passed from php):

SELECT * FROM table
WHERE LOWER(content) LIKE '%$search%'
AND content REGEXP '[\]].[^\[]*$search'

I wanted my $search to be found only after "]", and only if there is no "[" between them. Other characters are allowed.
  Posted by Jim W on July 13, 2010
Since character code escape sequences aren't supported, here's a handy regexp for finding any rows with characters outside of the ASCII range:

SELECT * FROM my_table
WHERE the_column REGEXP '[^[.NUL.]-[.DEL.]]'

Alternately, if you want to exclude control characters as well:

SELECT * FROM my_table
WHERE the_column REGEXP '[^ -~]'
  Posted by ehab heikal on September 21, 2010
For those times when you need a fast reference for regex you can download and print or view this pdf http://www.elmotaheda.com/website-design-development/regex_cheat_cheat .

The sheet is color coded and is very easy to read.
  Posted by Kasey Speakman on November 10, 2010
It's quite unfortunate that their REGEX interpreter doesn't support logical NOT expressions. Ordinarily I would write something like this to match all numbers except 11:

(?!^11$)^\d+$

But with their implementation, I have to make a "do not match" field as well as a "match" field to make sure my conditions are met. :/
  Posted by Andrey Klyuchnikov on March 1, 2011
re: Kasey Speakman

^([0-9]|[02-9][02-9]|[0-9][02-9]|[02-9][0-9]|[0-9]{3,})$

:)
  Posted by Naved Shah on May 13, 2011
For LIKE Results

SELECT * FROM REG where seg_3 REGEXP 'SHA|S11|A11|SH4|SH4H|H4H|5HA|5HAH|HAH'

SNUSHAH

  Posted by Jon Spriggs on November 24, 2011
I struggled with the [:character_type:] element of the regexp. I had a problem where users were entering artist names with various degrees of spacing in the name... for example "Loudog" and "Lou Dog".

To get around this, I changed the string being searched for, in code, to: "[:space:]*L[:space:]*o[:space:]*u[:space:]*D[:space:]*o[:space:]*g[:space:]*" but this wasn't working.

Eventually someone spotted that I was essentially searching for zero-or-more instances of the characters :, s, p, a, c or e. This search should instead have been: "[[:space:]]*L[[:space:]]*o[[:space:]]*u[[:space:]]*D[[:space:]]*o[[:space:]]*g[[:space:]]*"

It's not clear in the examples above that this is what you should be searching for. This is roughly equivelent to "/\s+L\s+o\s+u\s+D\s+o\s+g\s+/i"

  Posted by Kasey Speakman on December 8, 2011
@Andrey Klyuchnikov

Using ORed decompositions is fine for my simple example, but in actual data, the length of the decompositions may be well beyond the point where they would be worth doing over just using two fields... or better yet if MySQL would implement the negation operator ?!.

Also, decompositions are much less clear in what they are doing. It's pretty obvious what the negation operator is doing. When I have to revisit a regex 2 years from now to add something to it, I'm going to want to smack someone that used a decomp.
  Posted by Eric Kent on December 23, 2011
If you need an IsNumeric or IsInt function, you can use:
return sValue regexp '^-?[0-9]+[.]?[0-9]*$|^-?[.][0-9]+$';
or
return sValue regexp '^-?[0-9]+$';
where sValue is a char argument.
  Posted by Naftali Zakharov on May 2, 2013
Ehab Heikal, thanks for your link to the regex cheat sheet. Only, the content is no longer there. I am aware of some other regex cheat sheets that seem very popular and I am sharing a short list here.

1) A pretty neutral cheat sheet for regexes.
The download is for free.
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
and there is a nicer-looking one for a symbolic fee, here:
http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/

2) While we are at it, here's a MySQL cheat sheet by the same author:
http://www.addedbytes.com/download/mysql-cheat-sheet-v1/pdf/

3) Another regex cheat sheet:
http://www.regular-expressions.info/reference.html

Hope this is helpful.
Sign Up Login You must be logged in to post a comment.