5

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

为了我们的目的,假设我正在寻找数字1234

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

1234
;1234;
1234 : 5678
;1234,3321

和不应该匹配的例子(因为它是不同的数字):

;12345;
0123456

我目前的尝试:

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

这是我的问题的 Regex Tester 的永久链接: Regex Tester fiddle

4

3 回答 3

4

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

您可以使用它来更好地理解正则表达式。它有一个很好的 gui 来可视化模式。调试器

于 2013-08-27T14:23:26.347 回答
2

如果你的风格支持lookahead 和 lookbehind,请使用:

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

环顾测试是否出现不匹配的字符。负环视仅在没有发生时接受。

如果它支持单词边界

\b1234\b

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

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

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

如果您的引擎甚至不支持\dand ,请分别\D替换它们。[0-9][^0-9]

于 2013-08-27T14:22:21.627 回答
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”开头或结尾且没有其他字符的字符串可能存在问题。根据正则表达式的实现,可能不需要正面和背面的任何内容的匹配。

于 2013-08-27T14:24:35.363 回答