正则表达式 - 在字符串中找到具体数字

问题描述:

我正忙于正规表达整天,并找不到解决方案。 我试图在包含数字,分号,冒号和空格的字符串中找到一些具体的数字。正则表达式 - 在字符串中找到具体数字

为了我们的目的,让我们说,我找数

这里有应符合几个例子(每一行是一个不同的字符串):

1234 
;1234; 
1234 : 5678 
;1234,3321 

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

;12345; 

我目前的a ttempt:

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

这里是一个永久链接的正则表达式测试仪与我的问题: Regex Tester fiddle

+1

您最终会使用哪种语言或工具?另外,这不是字符类的字怎么样,你是在寻找负面的[lookarounds](http://www.regular-expressions.info/lookaround。html] –

+0

'[^(0-9 *)]'表示不是数字('0-9'),括号('('或')')或星号*。你可能只想使用'[^ ​​0-9]'(不是数字)。 – Dukeling

+0

我打算在使用REGEX的MySQL中使用它,其中 –

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

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

+0

请注意,这将无法匹配字符串开头或结尾的数字。 –

+0

'1234'将作为重复计数集 – Jay

+0

@Jay不会不会 –

如果你的味道支持lookahead and lookbehind,去这样的:

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

环视试验字符的出现次数不匹配它们。只有在没有发生的情况下才会接受负面查看。

如果它支持word boundaries

\b1234\b 

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

否则检查非数字字符和字符串添加起点和终点:

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

如果你的引擎甚至不支持\d\D,通过[0-9]各自[^0-9]替换它们。

+1

字符类中的'^'和'$'只是文字字符。你需要在外面使用锚点,例如'(?:^ | \ D)...(?:\ D | $)' –

+0

Aye,太快了 - 编辑我的文章,但省略了非匹配组,因为这不是必需的,但会使查询更加复杂。 –

+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”结尾,并没有其他字符的字符串的问题。取决于正则表达式的实现,可能不需要匹配正面和背面上的任何内容。

+0

由于'[^ 0-9]'是可选的,'。*'可以匹配除'1234'(包括相邻数字)之外的所有内容。也不需要把这些数字放在课堂上。 –

+0

他们将被视为重复计数,除非被转义 – Jay

+0

不,他们不会。那是'{1234}' –