匹配空格

时间:2016-02-25 08:54:18

标签: php mysql regex

我试图匹配字符串中的位数。这是我的MySql查询的一部分

    SELECT digits, concat(digits, ' Digits ') as selects, count(*) as count
                    FROM (SELECT (case WHEN `no` REGEXP '[[:<:]][0-9]{1}[[:>:]]' then '1'
                                       WHEN `no` REGEXP '[[:<:]][0-9]{2}[[:>:]]' then '2'
                                       WHEN `no` REGEXP '[[:<:]][0-9]{3}[[:>:]]' then '3'
                                       WHEN `no` REGEXP '[[:<:]][0-9]{4}[[:>:]]' then '4'     
                                  end) AS digits
                          FROM `no_ads` AS a 
.......
.......

问题出在像4U 24U 2 a这样的字符串中,当我的查询计为1([[:<:]][0-9]{1}[[:>:]])时,我的查询会将其计为2位数。我如何在第一个空间后开始计算?

1 个答案:

答案 0 :(得分:0)

您的查询将匹配仅由数字组成的第一个word中的位数,您可以在此处查看缩减的测试用例。因此,如果您假设您只有一个这样的数字,那么您的查询实际上是有效的,并且您可以在测试集中看到您的示例。

SELECT t, (case 
     WHEN `t` REGEXP '[[:<:]][0-9]{1}[[:>:]]' then '1'
     WHEN `t` REGEXP '[[:<:]][0-9]{2}[[:>:]]' then '2'
     WHEN `t` REGEXP '[[:<:]][0-9]{3}[[:>:]]' then '3'
     WHEN `t` REGEXP '[[:<:]][0-9]{4}[[:>:]]' then '4'     
     end) AS digits
FROM test;

+---------------+--------+
| t             | digits |
+---------------+--------+
| 23            | 2      |
| 4U 2          | 1      |
| 4U 2 a        | 1      |
| 4U 23 a       | 2      |
| Ad 34 34 34 d | 2      |
| 4U 2 23 a     | 1      |
+---------------+--------+

无论如何,如果你想要,通常匹配一行中第一个空格后发生的事情,你可以使用^([[:alnum:]]+[[:blank:]]),其中^是字符串开头的符号。

See here the full list of Syntax of Regular Expressions