我需要:MySQL(php,PDO)用法的正则表达式。 Regexp应该找到括号[]之间的所有数字,但数字150除外。
所以我想得到:
[3]
[25464]
[510]
但我想排除:
[150]
我得到了什么:
\[{1}((?!150)[0-9])+\]{1}
它适用于最新版本的MySQL,但我需要的东西也适用于旧版本(可能是5.1)。
问题:目前我收到错误:
1139 - Got error 'repetition-operator operand invalid' from regexp
我知道我不能用?我怎样才能更换它?
其他信息(编辑): 我正在重新设计数据库,这就是我需要写这个
的原因II编辑 - 为什么我需要这个: 我需要检索“content”列中包含仅指定一个 [150]的所有行。一列“内容”可以包含零[nr]或一个特定[nr]或许多不同[nrs]。
WHERE content REGEXP '\[{1}((?!150)[0-9])+\]{1}' = 0 AND content LIKE '%[150]%'
答案 0 :(得分:1)
尝试这个,希望这有效。
$string='[3]
[25464]
[510]
[150]
[100]';
preg_match_all('/\[(?!150)\d+\]/', $string,$matches);
print_r($matches);
这将使用括号匹配所有数字(150除外) $ matches [0] 将包含所需的结果......
答案 1 :(得分:0)
WHERE x REGEXP '\[[[:digit:]]+\]'
AND NOT x REGEXP '\[150\]'
然而,这将拒绝aaa[123]bbb[150]ccc
。应该被拒绝吗? (请提供一些匹配/拒绝的样本数据。您的目标不是很明确。)
由于LIKE
比REGEXP
快,所以速度会快一些:
WHERE x REGEXP '\[[[:digit:]]+\]'
AND x NOT LIKE '%[150]%'