java - 如何获取与这些字符串匹配的正则表达式

标签 java regex

我正在尝试为通过 TCP/IP 套接字传入的 String 制作正则表达式。

$AVSYS,99999999,V1.17,SN0000103,32768*16

每个字符串应以美元符号 $ 和 5 到 6 位数字之间的大写字母字符开头。它们以 * 和 2 位字母数字校验和结尾。每个字段均以逗号 , 分隔,并且可以是任何字符串。

我为它创建了一个正则表达式。

^\$[A-Z]{5,6}(\,.*)(\,.*)(\,.*)(\,.*)(\,.*)\*[\d\w]{2}$

我预计它会匹配,但事实并非如此。尽管我已经阅读了 Java 文档,但我仍然不熟悉正则表达式。请帮助我获得正确的正则表达式。

已编辑

根据回复修复了正则表达式后,我尝试了这两个。

^\$[A-Z]{5,6}(\,.*)(\,.*)(\,.*)(\,.*)(\,.*)\*[\d\w]{2}$
^\$[A-Z]{5,6}(\,.*?)(\,.*?)(\,.*?)(\,.*?)\*[\d\w]{2}$

但是我得到的结果比我预期的要多。

$AVSYS,99999999,V1.17,SN0000103,32768*16
$AVRMC,80000551,144811,A,4351.3789,N,07923.4712,W,0.00,153.45,091107,A,,161,1*64
$AVRMC,80000551,144811,A,4351.3789,N,07923.4712,W,0.00,153.45,091107,A,,161,1,0,0*64
$EAVSYS,99999999,12345678901234567890,9057621228,,,*0B

以上句子都与正则表达式匹配。但我只想得到 1)。 我怎样才能实现这个目标?

最佳答案

要匹配任意数量的逗号分隔组,您可以使用以下表达式:

^\$[A-Z]{5,6}(,[^,*]*)*\*[\da-zA-Z]{2}$

数据部分与此表达式匹配:

(,[^,*]*)*

它匹配零个或多个以逗号开头的字符组,后跟除逗号或星号之外的任意数量的字符。一旦到达逗号或星号,表达式引擎就会检查它是否是新值或末尾的校验和。

如果校验和不允许小写字母,请将a-zA-Z替换为A-Z

关于java - 如何获取与这些字符串匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172285/

相关文章:

javascript - 字符串替换替换错误的部分

C# 正则表达式 : Capture everything up to

python - 将文本列拆分为 Pandas 数据框中的列表列,没有明确的拆分序列

java - 输入用户的用户名并使用它使用 java(JDBC) 删除 mysql 中的一行

java - 命令模式与反射

regex - "you can’ t 在 "Programming Perl"中隐藏正则表达式构造中模式的终止分隔符是什么意思?

Python 正则表达式匹配字符串中间

java - 一个项目,很多tomcat发生session被替换

java - 是否有更现代的 OO 版本的 "Let' s Build a Compiler”?

java - 通过改造上传文件