我想检查所有方括号是否仅包含数字,逗号和短划线。怎么做?
例如:
fsf[sdff0977sf0]sda[989,-]
不行
fsf[,,--9770-,875]sda[989,-]
确定
答案 0 :(得分:0)
我不知道您使用的是哪种语言。这是一个grep
解决方案:
$ grep -Eo '\[([0-9]|,|-)+\]' file.txt
[989,-]
[,,--9770-,875]
[989,-]
答案 1 :(得分:0)
在java中,您可以将此模式与matches
方法一起使用:
[^\\[]*(?:\\[[0-9,-]*][^\\[]*)*+
如果方括号中的所有部分仅包含数字,逗号和超量,则从字符串的开头到结尾进行检查。
注意:根据您的要求,方括号内的字符串和内容可以为空。但是我假设所有打开的方括号都是关闭的,方括号不是嵌套的。
答案 2 :(得分:0)
您可以尝试这样的事情:
^(?!.*\[[^\]]*[^0-9\],-][^\]]*\])
这里我断言在字符串中找不到上面的模式。上面的模式是一个左右方括号[
,后跟任意数字不是方括号]
的字符,后跟一个不是的字符:数字0-9
,结束方括号,逗号或破折号,紧跟(再次)任意数量的未关闭方括号的字符,后跟一个右方括号。
答案 3 :(得分:0)
我还想提出一些非常接近heemayl的答案。在JavaScript中:
var pattern = /\[[0-9,-]+\]/g;
您可以在此处使用它:http://regexr.com/3ajek
现在,唯一的问题是,在您的示例中,第一行应检测为“不正常”,因为它包含带有无效数据的括号块。正如您在上面的regexr.com示例中所看到的,它将不匹配。但该行上的另一个括号块将匹配。因此,如果要验证所有行,则必须循环括号块的每个匹配,然后检查它是否包含有效数据。如果其中一个括号块不包含有效数据,则所有行都无效。
由于我们没有完整的代码上下文,因此我们不确定知道您要验证的是什么。