我正在对SQL数据库进行查询,需要编写正则表达式来查找没有中间首字母的名称。
例如。
数据库中的全名存储在一个字符串中以供参考。
答案 0 :(得分:1)
试试这个
\w{2,} \w{2,}
两个单词,空格分隔,每个至少两个字符。
答案 1 :(得分:1)
你可以做一个相当简单的事情:
^([A-Za-z]+) ([A-Za-z]+)$
答案 2 :(得分:1)
使用以下方法(对于 MySql 查询):
SELECT
fullname
FROM
table
WHERE
fullname REGEXP '^[[:alpha:]]+[[:space:]]+[[:alpha:]]+$';
[:alpha:]
- 表示与所有字母数字字符匹配的字符类
[:space:]
- 表示与空格,制表符,换行符和回车符匹配的字符类
答案 3 :(得分:1)
您可以计算空格并过滤掉
之类的结果其中长度('Michael J Fox') - 长度(替换('Michael J Fox','',''))< 2
答案 4 :(得分:0)
你不需要正则表达式。怎么样?
where name like '% %' and name not like '% % %'
这只是在名称中查找两个空格。
如果你真的只想要中间首字母,那么:
where name not like '% _ %' and name not like '% _. %'
答案 5 :(得分:0)
^运算符在行的开头查找字符,\ $运算符查看行的结尾。这个正则表达式将在一行中查找至少两个字符长的两个单词。
^ [a-zA-Z] {2,} [a-zA-Z] {2,} \ $
答案 6 :(得分:0)
drop table if exists t;
create table t (name text);
insert into t values ('Michael J Fox');
insert into t values ('Michael J. Fox');
insert into t values ('Michael Fox');
insert into t values (' Michael Fox ');
允许前导空格和尾随空格,以及两者之间的多个空格,但只允许两组非空格字符:
select name, name REGEXP '^ *[^ ]+ +[^ ]+ *$'
from t;
rextester 演示:http://rextester.com/CFID40649
+---------------------+----------------------------------+
| name | name REGEXP '^ *[^ ]+ +[^ ]+ *$' |
+---------------------+----------------------------------+
| Michael J Fox | 0 |
| Michael J. Fox | 0 |
| Michael Fox | 1 |
| Michael Fox | 1 |
+---------------------+----------------------------------+