仅限正方括号中的数字的正则表达式

时间:2015-03-12 12:39:15

标签: regex

我想检查所有方括号是否仅包含数字,逗号和短划线。怎么做?

例如:

fsf[sdff0977sf0]sda[989,-]不行

fsf[,,--9770-,875]sda[989,-]确定

4 个答案:

答案 0 :(得分:0)

我不知道您使用的是哪种语言。这是一个grep解决方案:

$ grep -Eo '\[([0-9]|,|-)+\]' file.txt 
[989,-]
[,,--9770-,875]
[989,-]

答案 1 :(得分:0)

在java中,您可以将此模式与matches方法一起使用:

[^\\[]*(?:\\[[0-9,-]*][^\\[]*)*+

如果方括号中的所有部分仅包含数字,逗号和超量,则从字符串的开头到结尾进行检查。

注意:根据您的要求,方括号内的字符串和内容可以为空。但是我假设所有打开的方括号都是关闭的,方括号不是嵌套的。

fiddle

答案 2 :(得分:0)

您可以尝试这样的事情:

^(?!.*\[[^\]]*[^0-9\],-][^\]]*\])

See Regex 101 Demo here.

这里我断言在字符串中找不到上面的模式。上面的模式是一个左右方括号[,后跟任意数字不是方括号]的字符,后跟一个不是的字符:数字0-9,结束方括号,逗号或破折号,紧跟(再次)任意数量的未关闭方括号的字符,后跟一个右方括号。

答案 3 :(得分:0)

我还想提出一些非常接近heemayl的答案。在JavaScript中:

var pattern = /\[[0-9,-]+\]/g;

您可以在此处使用它:http://regexr.com/3ajek

现在,唯一的问题是,在您的示例中,第一行应检测为“不正常”,因为它包含带有无效数据的括号块。正如您在上面的regexr.com示例中所看到的,它将不匹配。但该行上的另一个括号块将匹配。因此,如果要验证所有行,则必须循环括号块的每个匹配,然后检查它是否包含有效数据。如果其中一个括号块不包含有效数据,则所有行都无效。

由于我们没有完整的代码上下文,因此我们不确定知道您要验证的是什么。