2013-05-18 162 views
1

常規的正則表達式:什麼是MySQL的SQL正則表達式這個表達式

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死亡。

+2

我剛剛複製你的SQL語法,並放在我的MySQL GUI上,工作整齊。順便說一句,它返回1. –

+1

你的服務器上運行着什麼MySQL版本? –

+0

@LuiggiMendoza hrmm wacked。我正在SQuirreL中測試它,並在那裏死亡。我把它放到MySQL Workbench中,它可以工作。那太奇怪了。必須是SQuirreL錯誤或其他東西。謝謝!哈哈 –

回答

1

不具有立即availble的MySQL的控制檯來驗證,這應該工作:

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

你的其他的正則表達式有兩個富(123)和Foo(123)周圍的捕捉組。它看起來並不像你希望MySQL中的捕獲組(它甚至支持它們?),這會導致MySQL窒息。

0

因爲我遇到了這個問題並找到了問題/解決方案,

轉到全局首選項 - > MySQL選項卡。在「使用自定義查詢標記器」下有一個「程序/函數分隔符」。如果那是「|」將其更改爲其他內容(如「/」)。這是導致SQuirreL無法解析REGEX的原因。

相關問題