正则表达式匹配可能的单词

3
整天都在尝试让这个工作起来,但我不太擅长正则表达式。
在我的情况下,格式正确的字符串看起来像:
String s = "10 LET D = 4";

我正在尝试创建一个正则表达式,以确保它的格式正确。

目前我只是这样做:

boolean b = s.matches("[0-9]+ GOTO|LET [a-zA-Z] +|= [0-9]+");

但是我知道我的GOTO | LET有些问题,因为我只是自己编造的。即使加上括号也不起作用,所以我现在有点迷失了。使用正则表达式实现我想做的事情是否可能?如果不行,还有其他建议吗?


我很好奇 5 GOTO D = 3 是否合法?我对这种语言有一些假设,只是想知道它们是否正确。 - Tim Bender
2个回答

5
假设您允许使用语法GOTOLET,将括号放在这些术语周围应该解决问题。
此外,我已经在+=周围添加了分组(括号)。这是一个快速的避免冲突的方法,因为+是正则表达式语法的一部分。
boolean b = s.matches("[0-9]+ (GOTO|LET) [a-zA-Z] [+=] [0-9]+");

注意:我同意其他用户的观点,如果这是更大语法的一部分,那么解析器可能更适合。


2

当涉及到编程语言时,你可能需要一个解析器而不是正则表达式;然而,这实际上取决于语言规则的简单程度。你可以使用 regexpal(你可以通过谷歌搜索找到一堆正则表达式测试工具)来测试正则表达式。

提示:对于goto和let,你需要括号。同时,你可能还想接受任意数量的空格,只要至少有一个空格就行了。你可以使用"\s+"来实现。


+1我同意使用解析器可能是最好的选择。特别是如果它是更大语法的一部分。 - Jason McCreary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接