2015-07-28 79 views
0

我想將此查詢的結果與我用於PHP驗證的正則表達式匹配。MYSQL子查詢和正則表達式

select u.id,concat(u.address1,', ',u.zip,' ',u.city,', ',c.countryName) as Address 
from User u join 
    country c on u.countryCode=c.countryCode 

輸出

27 Avenue Pasteur, 14390 Cabourg, France 

28 Avenue Pasteur, 14390 Cabourg, France 

30 14390 Cabourg, France 

29 Avenue Pasteur, 14390 Cabourg, France 

我不會與下面的正則表達式匹配這個只有得到正確的結果。

/^(?:\\d+ [a-zA-Z ]+,){2}[a-zA-Z ]+$/ 

我不知道如何得到這個使用MYSQL REGEXP

select u.id,concat(u.address1,', ',u.zip,' ',u.city,', ',c.countryName) as Address 
    from User u join 
     country c on u.countryCode=c.countryCode 
where Address REGEXP '^st' 
+0

由於在地址門牌號後缺少逗號,該正則表達式將不匹配任何字符串。似乎也是其他問題。試圖解決時間。 – icecub

+1

這與https://regex101.com/r/zN7yT1/1後的內容更接近。我不確定哪些修飾符支持mysql,可能需要將'[a-z]'放入'[a-zA-Z]'中。 – chris85

+0

@icecub沒有它匹配27 Avenue Pasteur,法國14390卡布爾 – dev1234

回答

1

每本手冊,https://dev.mysql.com/doc/refman/5.1/en/regexp.html,正則表達式在MySQL中使用這樣的:

WHERE phone REGEXP '(435)';

現在在您的實例中,您的正則表達式有幾個問題。我更新的正則表達式解決了大部分問題,但仍然沒有找到其中一個地址(30 14390 Cabourg,法國)。 https://regex101.com/r/zN7yT1/1

select u.id,concat(u.address1,', ',u.zip,' ',u.city,', ',c.countryName) as Address 
from User u join 
country c on u.countryCode=c.countryCode 
where concat(u.address1,', ',u.zip,' ',u.city,', ',c.countryName) 
regexp '^[0-9]+,? [^,]+, [0-9]+,? [^,]+, [a-zA-Z]+$' 

這是未經測試,但我認爲應該帶回三個結果regex101發現。

+0

它會給出相同的結果/?如果正則表達式更改爲/ ^(?:\\ d + [a-zA-Z] +,){2} [a-zA-Z] + $/ – dev1234

+0

你想要做什麼?我不認爲'\ d'被支持。沒有分隔符。 – chris85