我正在对邮政编码/邮政编码字段进行查询。
我一直在进行一些研究,并且不支持负面的预测:
" MySQL支持POSIX正则表达式,而不支持PCRE"
使用MYSQL支持的正则表达式,是否有下面的替代解决方案?
import java.util.ArrayList;
import java.util.Collections;
public class ComparatorExample {
static class Person implements Comparable<Person> {
private String initial;
private String surName;
public Person(final String initial, final String surName) {
this.initial = initial;
this.surName = surName;
}
public String getInitial() {
return initial;
}
public void setInitial(final String initial) {
this.initial = initial;
}
public String getSurName() {
return surName;
}
public void setSurName(final String surName) {
this.surName = surName;
}
@Override
public int compareTo(final Person o) {
return surName.compareTo(o.surName);
}
@Override
public String toString() {
return initial + ' ' + surName;
}
}
public static void main(String[] args) {
Person a = new Person("A", "John");
Person b = new Person("B", "Adam");
Person c = new Person("K", "Henry");
ArrayList<Person> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
- 这是PHP中的解决方案
对数据库的示例查询
(?i)^W(?!C)
答案 0 :(得分:3)
在MySQL中,您可以使用
WHERE postcode REGEXP '^W([^C]|$)'
([^C]|$)
匹配除C
或字符串结尾之外的任何字符。此外,无需使用TOLOWER
,因为默认情况下正则表达式搜索不区分大小写。
请参阅online tests:
SELECT 'wc' REGEXP '^W([^C]|$)'; // => 0
SELECT 'wR' REGEXP '^W([^C]|$)'; // => 1
SELECT 'w' REGEXP '^W([^C]|$)'; // => 1
答案 1 :(得分:0)
您可以反转您想要实现的正则表达式并使用NOT REGEXP
SELECT postcode from `postcodes`
WHERE postcode NOT REGEXP '^w(c|$)'
上面的代码是关于问题中询问的单个字符。 对于在此线程中结束并寻找带有完整单词的否定前瞻的人来说,与@Wiktor Stribiżew
的其他答案形成对比也是可能的-- So not the word 'not_this_word' or end of the string '$'
SELECT postcode from `postcodes`
WHERE postcode NOT REGEXP '^w(not_this_word|$)'
或者你可以使用 NOT IN 进行子查询
SELECT postcode from `postcodes`
WHERE postcode NOT IN (
SELECT postcode from `postcodes` WHERE postcode REGEXP '^w(not_this_word|$)'
)