正则表达式 - 在字符串中查找特定数字

时间:2013-08-27 14:17:49

标签: mysql regex

我整天都在正常表达中挣扎,无法找到解决方案。 我试图在包含数字,分号,冒号和空格的字符串中找到一些特定的数字。

出于我们的目的,假设我正在寻找数字 1234

以下是一些应该匹配的示例(每一行都是不同的字符串):

1234
;1234;
1234 : 5678
;1234,3321

不应该匹配的例子(因为它的号码不同):

;12345;
0123456

我目前的尝试:

[^(0-9*)]1234[^(0-9*)]

以下是我的问题与Regex Tester的永久链接: Regex Tester fiddle

3 个答案:

答案 0 :(得分:2)

如果您的口味支持lookahead and lookbehind,请使用此选项:

(?<!\d)1234(?!\d)

在不匹配字符的情况下查看字符出现的测试。负面观察仅在没有出现时才接受。

如果它支持word boundaries

\b1234\b

词边界包括例如。空白和标点符号。

否则检查非数字字符并添加字符串开始和结束:

(^|\D)1234($|\D)

如果您的引擎甚至不支持\d\D,请将其[0-9]替换为[^0-9]

答案 1 :(得分:2)

也许试试这个:([^0-9]|^)1234([^0-9]|$)在这种情况下,您不需要环视功能。

您可以使用它来更好地理解regexp。它有一个很好的gui可视化模式。 Debuggex

答案 2 :(得分:0)

这可能有效:

.*[^0-9]*[1][2][3][4][^0-9]*.*

工作原理:

.*             anything
[^0-9]*        an optional character that is not a number
[1][2][3][4]   "1234" done this way because it will be taken as a repeat count unless escaped
[^0-9]*        an optional character that is not a number
.*             anything

字符串以“1234”开头或结尾并且没有其他字符可能存在问题。根据正则表达式的实现,可能不需要正面和背面的任何匹配。