MySQL:我正在尝试匹配一个单词('anchor')和该单词的大多数变体('anchorman'/'anchorwoman','anchor man'/'anchor woman','co-anchor','锚定'等等),但我想特别排除'锚地'。有没有办法做到这一点?
我写道:
table.column regexp '[[:<:]]anchor[^age]'
我想要包含的词是:
anchor
co-anchor
anchored
anchorman
anchor man
anchorwoman
anchor woman
anchoring
但不是anchorage
查询的问题在于它正在取出anchored
。
答案 0 :(得分:0)
此任务的一般情况称为&#34;词干&#34;而且这是出了名的困难。
但是,让我们回答您的具体问题:
column REGEXP '[[:<:]](co-)?anchor(|man|woman|ed|ing)[[:>:]]'
应该满足您的需求。解释:
[[:<:]] beginning of word
(co-)? optional "co-" prefix
anchor the root of the word you want to recognize
(|man|woman|ed|ing) several alternative suffixes. The first alternative is empty.
[[:>:]] end of word.
请注意,这将匹配&#34;主播男人&#34;,&#34;锚女人&#34;和#34;锚鹅#34;。
请注意,您的示例包含[^age]
。这意味着&#34;除a,g或e之外的任何单个字符。不完全是你想要的。
答案 1 :(得分:0)
根本不使用正则表达式怎么样?
where replace(column, 'anchorage', '') like '%anchor%'
当然,您仍然可以使用正则表达式来检查字边界。但是删除你不想要的词似乎是你特定问题的简单解决方案。