2016-07-29 120 views
1

我想用正则表达式这个筛选出纯粹的中国名字:如何使用正则表达式匹配没有任何字母,数字或特殊字符的单词?

SELECT `name` FROM `table` WHERE `name` REGEXP '[u4e00-u9fa5]'; 

但是,根据this,这是不可能的,所以我想办法,从相反的方向,发现内容没有任何字母,数字和特殊字符(我知道它不是硬性的),但无法找到“和”运算符,那么该怎么做呢?

+0

对不起,没有字母的“单词”是不可能的,对吧?另外,如果不应该有文字,也没有特殊的字符,你需要只匹配空格还是空格?太不清楚了。 –

+0

你可以制作一个负面的字符类,比如'[^ A-Za-z0-9 ./,]',并且在必要时不断添加它,但是我不清楚你是在问什么。 –

+0

@WiktorStribiżew对不起,我的意思是中文字或词。 –

回答

2

MariaDB使用PCRE正则表达式库以10.0.5版本开头:“Starting with MariaDB 10.0.5, MariaDB switched to the PCRE regular expression library for enhanced regular expressions.”。

要匹配包含中国信使用条目

REGEXP '[\\x{4e00}-\\x{9fa5}]' 

甚至

REGEXP '\\p{Han}' 

要没有中国字母匹配相反,,用途:

REGEXP '^[^\\x{4e00}-\\x{9fa5}]*$' 

or

REGEXP '^\\P{Han}*$' 
+0

Stribizew,SELECT'name' FROM'table' WHERE'name' REGEXP'^ \\ p {Han} * $',不会匹配没有中文字母的条目,而是纯中文单词。 –

+0

是的,我知道。 '^ \\ p {Han} * $''匹配一个只包含中文字母的字符串。而'^ \\ P {Han} * $''会匹配一个由中文字母以外的字符组成的字符串。请注意后一个正则表达式中的大写'P',这意味着我们正在逆转Unicode属性类。 –

+0

非常感谢 –

相关问题