1

通常の正規表現:

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の死を迎えています。

4

2 に答える 2

1

検証するすぐに使用できる MySQL コンソールがない場合、これは機能するはずです。

'foo\\([:digit:]{1,3})\\)?'

他の正規表現には、foo(123)と foo( 123) の両方にキャプチャ グループがあります。MySQL でキャプチャ グループが必要なようには見えません (サポートしていますか?)。これは MySQL のチョークにつながります。

于 2013-05-18T00:25:22.720 に答える
1

私がこれに遭遇し、問題/解決策を見つけたので、飛び込んできました。

[グローバル設定] -> [MySQL] タブに移動します。「Use Custom Query Tokenizer」の下に「Procedure/Function Separator」があります。それが「|」の場合 他のもの (「/」など) に変更します。これが、SQuirreL が REGEX の解析に失敗する原因です。

于 2016-10-28T18:18:05.513 に答える