我使用正则表达式从数据库中获取数据时出现问题。当我搜索“男人”时在标签中,它返回的标签包含' woman'太;因为它的子串。
SELECT '#hellowomanclothing' REGEXP '^(.)*[^wo]man(.)*$'; # returns 0 correct, it contains 'woman'
SELECT '#helloowmanclothing' REGEXP '^(.)*[^wo]man(.)*$'; # returns 0 incorrect, it can contain anything other than 'woman'
SELECT '#stylemanclothing' REGEXP '^(.)*[^wo]man(.)*$'; # returns 1 correct
当我搜索' man'时,如何更新正则表达式?它应该只返回标记包含'man'不是女人'?
答案 0 :(得分:3)
您可以使用两个表达式。我认为like
就足够了:
SELECT ('#stylemanclothing' like '%man%' and '#stylemanclothing' not like '%woman%')
虽然您可以在正则表达式中表达这一点,但这可能是更容易的解决方案。
答案 1 :(得分:2)
使用此:
SELECT '#helloowmanclothing' REGEXP '^(.)*([^o]|[^w]o)man(.)*$'
在你的模式中[^wo]
代表“除了w和o之外的一个字符”,而你需要排除两个连续的字符 - w然后是o。
因此,只有当o
以man
以外的字符开头时,上述模式才允许o
w
。
答案 2 :(得分:1)
n-dru模式的变体,因为您不需要描述所有字符串:
SELECT '#hellowomanclothing' REGEXP '(^#.|[^o]|[^w]o)man';
注意:如果标签包含“男人”字样。和女人'这种模式将返回1.如果您不想要Gordon Linoff解决方案,那就是您正在寻找的。 p>