Java 什么正则表达式与这个字符串匹配?
如何获取此Java 什么正则表达式与这个字符串匹配?,java,regex,string,Java,Regex,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},
字符串的正则表达式
:
$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}";
注意:我可以在两个逗号之间有一些数据,但有时它也可以是空的。如果你不想要{0,1}
,你需要*
<代码>*正在重复上一个元素0次或更多次
\w
包括字母、数字和下划线。在示例字符串中有“60.210.45.68”,点与\w
不匹配。您可以通过创建自己的来添加此项
[\\w.]
是与a或点匹配的字符类
我还将量词移动到了捕获组中,因此可以在捕获组中找到逗号之间的所有匹配部分
如果不需要捕获逗号之间的部分,可以将正则表达式缩短很多:
^\$OK:COMMAND=[\w.]*(?:,[\w.]*){9}
请参见
{0,1}
表示(\\w)
重复0到1次45(以及此字符串的其他部分)有2个\\w
。您确实需要指定要匹配的文本中可能存在的变化。是否总是有相同数量的逗号?有文本、IP地址、数字的字段是否总是相同的?您在哪里匹配了句点?#Dan Hulme:Fix String:$OK:COMMAND=我有一个固定数量的逗号作为示例,在两个逗号之间,我可以有一个字符串、一个数字或IP@或什么都没有{0,1}
并不等同于*
实际上它与相同?
@anubhava,我没有尝试用适当的快捷方式替换{0,1}
。35; stema:如何将IP@的字符类添加到此模式中???@Abdelbarinouar,我在回答中添加了一个解释
^\$OK:COMMAND=[\w.]*(?:,[\w.]*){9}