通常の正規表現:
foo(\((\d{1}|\d{2}|\d{3})\))?
この正規表現は Java で機能します。
foo(\\((\\d{1}|\\d{2}|\\d{3})\\))?
例:
fooa //no match
foo(1)a //no match
foo(a) //no match
foo(1) //match
foo(999) //match
foo //match
MySQL 5.5 のドキュメント ( https://dev.mysql.com/doc/refman/5.5/en/regexp.html ) によると
Note:
Because MySQL uses the C escape syntax in strings (for example, “\n” to
represent the newline character), you must double any “\” that you use
in your REGEXP strings.
MySQL 5.xで以下を実行してテストとして試しました
select 'foo' REGEXP 'foo(\\((\\d{1}|\\d{2}|\\d{3})\\))?'
これが私が得るエラーメッセージです:
Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near ''foo(\\([(]\\d{1}' at line 1
Adapting a Regex to work with MySQLを見て、\d{1} などを [0-9] に置き換える提案を試みました。
select 'foo' REGEXP 'foo(\\(([0-9]|[0-9]|[0-9])\\))?'
しかし、まだMySQLの死を迎えています。