2015-07-28 4 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 Cabourg, France – dev1234

ответ

1

Per руководства, https://dev.mysql.com/doc/refman/5.1/en/regexp.html, регулярное выражение используется в MySQL, как это:

WHERE phone REGEXP '(435)';

теперь в вашем случае ваше регулярное выражение имеет несколько проблем. Регулярное выражение, которое я обновил, решает большинство проблем, но все же один из адресов не найден (30 14390 Cabourg, France). 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

Смежные вопросы