MySQL子串匹配使用正则表达式;子串包含' man'不是女人'

时间:2015-06-22 11:18:35

标签: mysql regex

我使用正则表达式从数据库中获取数据时出现问题。当我搜索“男人”时在标签中,它返回的标签包含' 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'不是女人'?

3 个答案:

答案 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。

因此,只有当oman以外的字符开头时,上述模式才允许o w

答案 2 :(得分:1)

n-dru模式的变体,因为您不需要描述所有字符串:

SELECT '#hellowomanclothing' REGEXP '(^#.|[^o]|[^w]o)man';

注意:如果标签包含“男人”字样。和女人'这种模式将返回1.如果您不想要Gordon Linoff解决方案,那就是您正在寻找的。