我整天都在正常表达中挣扎,无法找到解决方案。 我试图在包含数字,分号,冒号和空格的字符串中找到一些特定的数字。
出于我们的目的,假设我正在寻找数字 1234
以下是一些应该匹配的示例(每一行都是不同的字符串):
1234
;1234;
1234 : 5678
;1234,3321
不应该匹配的例子(因为它的号码不同):
;12345;
0123456
我目前的尝试:
[^(0-9*)]1234[^(0-9*)]
以下是我的问题与Regex Tester的永久链接: Regex Tester fiddle
答案 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”开头或结尾并且没有其他字符可能存在问题。根据正则表达式的实现,可能不需要正面和背面的任何匹配。