什么正则表达式匹配此字符串?

时间:2013-09-30 10:33:36

标签: java regex string

如何获取此String的正则表达式:

$OK:COMMAND=4,45,,internet,,,60.210.45.68,1050,30,168.95.1.1

我试过这个,但似乎它不起作用:

public static final String commandMotif = "^\\$OK:COMMAND=(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1},(\\w){0,1}";

注意:我可以在两个逗号之间有一些数据,但有时也可能是空的。

1 个答案:

答案 0 :(得分:2)

您不需要quantifier {0,1},您需要**重复上一个元素0或更多次。

\w包括字母和数字以及下划线。在您的示例字符串中有“60.210.45.68”,点与\w不匹配。您可以通过创建自己的character class来添加此内容。

public static final String commandMotif = "^\\$OK:COMMAND=([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*),([\\w.]*)";

[\\w.]是匹配word character或点的字符类。

我还在捕获组中移动了量词,因此可以在捕获的组中找到逗号之间的所有匹配部分。

如果你不需要捕捉逗号之间的部分,你可以缩短正则表达式:

^\$OK:COMMAND=[\w.]*(?:,[\w.]*){9}

here at Regexr