正则表达式(不带“?”)以匹配不包含特定字符串的行(错误 #1139)


Regular Expressions (without "?") to match line that doesn't contain specific string (error #1139)

我需要:MySQL (php, PDO( 用法的正则表达式。正则表达式应该找到括号 [ ] 之间的所有数字,除了数字 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]%'

试试这个,希望这能奏效。

 $string='[3]
 [25464]
 [510]
 [150]
 [100]';
 preg_match_all('/'[(?!150)'d+']/', $string,$matches);
 print_r($matches);

这将匹配带括号的所有数字(150 除外(。
$matches[0] 将包含所需的结果...

WHERE     x REGEXP ''[[[:digit:]]+']'
  AND NOT x REGEXP ''[150']'

但是,这将拒绝aaa[123]bbb[150]ccc。 应该拒绝吗? (请提供一些匹配/拒绝的示例数据。 你的目标不是很清楚。

由于LIKEREGEXP快,这会快一点:

WHERE x REGEXP ''[[[:digit:]]+']'
  AND x NOT LIKE '%[150]%'