2014-03-28 14 views
2

我想检索具有仅包含2个单词的特定列的所有行。我试过了,但失败了:将简单的正则表达式模式应用于SQL查询

SELECT DISTINCT sentence FROM vocab WHERE p='adj' AND sentence REGEXP '^[a-zA-Z]+\s[a-zA-Z]+$' 

这似乎不起作用。词可以有!要么 ?在其中,所以我不认为[a-zA-Z]是适当的任何一种方式。

编辑:我应该改写一下,它应该匹配任何“组”字符。含义

xczc zczxc〜

1233 iojsd

'+ A S〜º

我可以使用类似(。*)?

+0

除“!”要么 ”?”单词中是否有其他符号或数字? –

+0

'/ \ S + \ s + \ S + /'也许? – tadman

+0

'[a-zA-Z] + [[:space:]] [a-zA-Z] + $' – raina77ow

回答

3

MySQL doesn't support \s所以你可以使用[[:space:]]相反,你可以试试这个:

SELECT DISTINCT sentence 
FROM vocab 
WHERE p='adj' 
AND sentence RLIKE '^[[:punct:][:alnum:]]+[[:space:]][[:punct:][:alnum:]]+$' 

它会寻找行,其中一句是2个字,其可能包含字母,?!

Sample SQLFiddle

+0

我没有很好地解释自己,它实际上应该包括几个字符(不只是!或?)。请参阅我的更新。我可以使用(。*)吗? – Cornwell

+0

@Cornwell使用'。*'的问题是它包含空格,请参阅我的更新答案... – DarkAjax

+1

谢谢。这是完美的! – Cornwell

1

不是很漂亮,但这个应该工作

'^[a-zA-Z?!]+[[:space:]][a-zA-Z?!]+$'