2016-06-24 34 views
1

請在下面找到我的查詢。正則表達式 - 兩個字符如何匹配(MySql)

SELECT * FROM demoTable WHERE C_APPLICATION_REF_NO REGEXP '[A-Z]{1}[0-9]{0,14}'; 

爲什麼我收到這有兩個人物,而我正在匹配只有一個字符和其他人是數字結果。

enter image description here

如何修改我的正則表達式的表達,這樣我只能取一個字符,其它的是數字。

+1

你匹配,其中一個字符後面跟着零到14號的所有記錄。但你永遠不會說這個人物不應該是別的字符 – Jens

回答

2

原因是你的正則表達式並沒有錨定到字符串的開始/結尾,因此也返回了部分匹配。

使用

REGEXP '^[A-Z][0-9]{0,14}$' 

{1}是多餘的。

+0

我也試過這個。 [A-Z] [0-9] {0,14}。無論如何得到了原因。 –

+0

如果我從正則表達式中刪除結尾($)它再次匹配兩個字符。任何理由?這一次看起來很好,沒有結束的字符串。就像剛開始時一樣,下一個字符就是數字。 @WiktorStribiżew –

+1

'$'是字符串定位符的結尾,如果刪除它,模式會在'AB'中找到匹配'A',因爲[0-9] {0,14}'允許匹配空字符串(零數字)。你必須在這裏使用錨點。 –

0

此查詢應該有效。

SELECT * FROM demoTable WHERE C_APPLICATION_REF_NO REGEXP '^[A-Z]{1}[0-9]{0,14}$'; 
+1

當然,這正是我在我的答案中已經提出的建議。 –

0

這可以幫助您:

var patt =/^[A-Z]{1,}[0-9]{0,14}$/g; 

或者

var patt =/^[A-Z][0-9]{0,14}$/g;