正则表达式 - 在字符串中找到具体数字
我正忙于正规表达整天,并找不到解决方案。 我试图在包含数字,分号,冒号和空格的字符串中找到一些具体的数字。正则表达式 - 在字符串中找到具体数字
为了我们的目的,让我们说,我找数
这里有应符合几个例子(每一行是一个不同的字符串):
1234
;1234;
1234 : 5678
;1234,3321
而且例子不应该匹配(因为它是不同的数字):
;12345;
我目前的a ttempt:
[^(0-9*)]1234[^(0-9*)]
这里是一个永久链接的正则表达式测试仪与我的问题: Regex Tester fiddle
如果你的味道支持lookahead and lookbehind,去这样的:
(?<!\d)1234(?!\d)
环视试验字符的出现次数不匹配它们。只有在没有发生的情况下才会接受负面查看。
如果它支持word boundaries:
\b1234\b
字边界包括如。空白和标点符号。
否则检查非数字字符和字符串添加起点和终点:
(^|\D)1234($|\D)
如果你的引擎甚至不支持\d
和\D
,通过[0-9]
各自[^0-9]
替换它们。
字符类中的'^'和'$'只是文字字符。你需要在外面使用锚点,例如'(?:^ | \ D)...(?:\ D | $)' –
Aye,太快了 - 编辑我的文章,但省略了非匹配组,因为这不是必需的,但会使查询更加复杂。 –
当然,没关系。我只是觉得,即使这种模式混乱了,它也是最重要的正则表达式习惯之一。因为有人*知道正常括号可以捕捉到我们所捕捉的东西 - 所以我总是试图保持清晰,并避免同时产生不必要的开销。 –
这可能会实现:
.*[^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-9]'是可选的,'。*'可以匹配除'1234'(包括相邻数字)之外的所有内容。也不需要把这些数字放在课堂上。 –
他们将被视为重复计数,除非被转义 – Jay
不,他们不会。那是'{1234}' –
您最终会使用哪种语言或工具?另外,这不是字符类的字怎么样,你是在寻找负面的[lookarounds](http://www.regular-expressions.info/lookaround。html] –
'[^(0-9 *)]'表示不是数字('0-9'),括号('('或')')或星号*。你可能只想使用'[^ 0-9]'(不是数字)。 – Dukeling
我打算在使用REGEX的MySQL中使用它,其中 –