所以我正在使用正则表达式在JavaCC中创建一个令牌。
我正在尝试仅允许3
个数字,且仅在0 - 180
之间。
此外,我尝试仅允许(在单独的标记中)0
和59.9999
之间的2位数字(4位小数)。
我不知道如何在JavaCC中为这两个令牌创建正则表达式...
任何有关解释的帮助都会非常棒,谢谢:)
答案 0 :(得分:1)
对于第一种情况,您的模式需要允许1位数字,2位数字,3位数字,其第一位数字为1,第二位数字在0-7范围内,特殊情况180。正则表达式看起来像
[0-9]{1,2}|1[0-7][0-9]|180
(我不知道javacc,所以我不知道如何使用这个正则表达式,或者你是否还需要别的东西来防止像1800
这样的东西被解析为数字,或者是两个数字你可能需要\b
来指示一个单词边界,但我不知道javacc是如何工作的。)
对于第二种情况,小数点左边的部分是一个数字,或者是第一个数字在0-5范围内的两个数字。您的要求不明确,但如果令牌需要小数点和小数点右侧的一到四位数,那么正则表达式将是
([0-9]|[0-5][0-9])\.[0-9]{1,4}
同样,我不知道javacc如何处理单词边界。
请注意,如果这是一个Java程序,我建议(在第一种情况下)将其解析为整数并将其与0和180进行比较。太多的提问者尝试使用正则表达式来解决每个问题,但它们是不适合每一个问题。由于这是针对javacc的,因此它可能是正则表达式使用简单且不进行数字比较的上下文 - 正如我所提到的,我对javacc一无所知。