Java检查字符串只有特定的单词和字符

Java检查字符串只有特定的单词和字符,java,regex,Java,Regex,我试图验证字符串是否只包含某些单词和字符 我将收到一个字符串,需要检查它是否只包含以下内容: “(” “”“ “和”注意空格 “或”注意空格 任意整数。如果我能同时检查它是否小于10,那将是一个额外的奖励,但是如果它使代码复杂化,我可以单独做 如果字符串中有任何其他字符或单词,我需要拒绝它 有效字符串应为: (1或((2和3)或4和5)) 我认为正则表达式是实现这一点的方法,但我不知道如何构建正则表达式来实现这一点 我知道正则表达式模式是: \( \) \sOR\s \沙\s \d+ 我

我试图验证字符串是否只包含某些单词和字符

我将收到一个字符串,需要检查它是否只包含以下内容:

  • “(”
  • “”“
  • “和”注意空格
  • “或”注意空格
  • 任意整数。如果我能同时检查它是否小于10,那将是一个额外的奖励,但是如果它使代码复杂化,我可以单独做
如果字符串中有任何其他字符或单词,我需要拒绝它

有效字符串应为: (1或((2和3)或4和5))

我认为正则表达式是实现这一点的方法,但我不知道如何构建正则表达式来实现这一点

我知道正则表达式模式是:

  • \(
  • \)
  • \sOR\s
  • \沙\s
  • \d+
我将它们连接在一起,因此模式是: “\sOR\s|\sAND\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。我可以满足这个要求这是我的代码。这看起来像是我将要使用的解决方案。谢谢您的帮助。:)