Php 在空格后匹配字符串中的位数
我正在尝试匹配字符串中的位数。这是我的MySql查询的一部分Php 在空格后匹配字符串中的位数,php,mysql,regex,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
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 2或4U 2这样的字符串。当我的查询应计为1[[::]时,它将计为2位数字。如何在第一个空格后开始计数?您的查询将与仅由数字组成的第一个单词中的位数相匹配,您可以在此处看到简化的测试用例。因此,如果您假设只有一个这样的数字,并且您可以在测试集中看到您的示例,那么您的查询实际上是有效的
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:][]其中^是字符串开头的符号
[[::]]模式无法匹配4U 2 a中的任何内容。我相信这里不应该怪正则表达式。使用它,您可以替换除数字以外的所有内容,然后计算字符串长度