Java检查字符串只有特定的单词和字符
我试图验证字符串是否只包含某些单词和字符 我将收到一个字符串,需要检查它是否只包含以下内容:Java检查字符串只有特定的单词和字符,java,regex,Java,Regex,我试图验证字符串是否只包含某些单词和字符 我将收到一个字符串,需要检查它是否只包含以下内容: “(” “”“ “和”注意空格 “或”注意空格 任意整数。如果我能同时检查它是否小于10,那将是一个额外的奖励,但是如果它使代码复杂化,我可以单独做 如果字符串中有任何其他字符或单词,我需要拒绝它 有效字符串应为: (1或((2和3)或4和5)) 我认为正则表达式是实现这一点的方法,但我不知道如何构建正则表达式来实现这一点 我知道正则表达式模式是: \( \) \sOR\s \沙\s \d+ 我
- “(”
- “”“
- “和”注意空格
- “或”注意空格
- 任意整数。如果我能同时检查它是否小于10,那将是一个额外的奖励,但是如果它使代码复杂化,我可以单独做
- \(
- \)
- \sOR\s
- \沙\s
- \d+
感谢您的帮助。您可以将构建的正则表达式与方法一起使用,前提是您转义所有
\
,并允许使用+
运算符重复出现:
boolean happy = testString.matches("(\\sOR\\s|\\sAND\\s|\\d+|\\(|\\))+");
我不确定
小于10是什么意思,但如果您的意思是数字可以是0-9,您可以将\\d+
替换为\\b\\d\\b
。如果您的意思是允许使用1-9位数字,则可以使用\\b\\d{1,9}\\b
我将使用您可以接受的字符并将它们置于常量中。然后把测试中的字符串转换成一个字符数组,逐个字符地检查它,看看它是否在常量中。否则就炸掉。成功完成=良好的字符串
我认为没有比这更短的方法了。请注意,正则表达式(通常)只能匹配正则语言。如果您希望正则表达式也检查匹配的paranethesis,那么您已经离开了“常规语言国家”:正则表达式不能这样做。换言之,您将无法识别“(1或”()作为非法表达式。关于“小于10”,您必须检查该数字后面是否有另一个数字取代\\d+
,\\d(?!\\d)
(或\\d\\b
或\\b\\d
).不需要检查另一面。@Casimir:是的,我刚刚意识到。我想添加单词边界(\\b
)将以干净的方式解决问题。@Keppil谢谢你的回答。匹配似乎有效,所以我会再测试一些。当我说小于10时,我应该说小于或等于10。所以1或10是有效的,但1或11不是。我不认为这在正则表达式中是可能的。实际上,不要担心1到10。我可以满足这个要求这是我的代码。这看起来像是我将要使用的解决方案。谢谢您的帮助。:)