-5

我如何得到这个的正则表达式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}";

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

4

1 回答 1

2

你不需要量词 {0,1},你需要*. *重复前一个元素 0 次或更多次。

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

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

[\\w.]是匹配单词字符或点的字符类。

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

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

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

在 Regexr 上查看

于 2013-09-30T10:37:31.420 回答