Java 正则表达式中的词边界

Java 正则表达式中的词边界,java,regex,Java,Regex,我正在使用以下正则表达式: if (input.matches("^[\\d\\s()\bAND\b\bOR\b.]+$")) { // do something } 我的目标是只验证数字(int和decimal)、空格、()、点和或。 其他一切都是不允许的。 它似乎可以工作,但我在word boundary\bAND\b和\bOR\b方面遇到了问题 我不能输入ANDWE或EEE或任何组合,但我能做的是A或A。 如何只允许字符串中的两个单词和/或?它们在字符串中是可选的 输入示例 0

我正在使用以下正则表达式:

if (input.matches("^[\\d\\s()\bAND\b\bOR\b.]+$")) {

   // do something

}
我的目标是只验证数字(int和decimal)、空格、()、点和或。 其他一切都是不允许的。 它似乎可以工作,但我在word boundary\bAND\b和\bOR\b方面遇到了问题 我不能输入ANDWE或EEE或任何组合,但我能做的是A或A。 如何只允许字符串中的两个单词和/或?它们在字符串中是可选的

输入示例

0.10和23-有效

12和(15或0.2)-有效

12或190-有效

第12条和第12条-有效


12 A 233-invalis

您需要数字、空格、括号、点和或

下面是一种方法,通过在character类中指定单个字符,并使用OR运算符
|
分隔两个单词。请注意,
\b
\
进行了转义,因为
\b
本身就是一个字符串转义序列

if (input.matches("^([\\d\\s().]|\\bAND\\b|\\bOR\\b)+$")) {

   // do something

}
这是一个关于你输入的测试程序

import java.util.regex.*;


public class Main{
    public static void main(String[] args) {
        String[] myArray = new String[] {"0.10 AND 23","12 AND (15 OR 0.2)","12 OR 190","12 AND AND 12","12 A 233"};
        String regex = "^([\\d\\s().]|\\bAND\\b|\\bOR\\b)+$";

        for (int i = 0; i < myArray.length; i++)
        System.out.println(myArray[i].matches(regex));

    }
}

不能使用一个正则表达式解析上下文无关语言

最简单的转换是括号平衡。您无法检测仅由括号组成的字符串是否正确平衡。例如,“()(())”。仅使用一个正则表达式无法检测此字符串是否正确


正则表达式引擎有一些扩展,您可以在其中使用内部堆栈

您不能在字符类中使用单词
[]
。您的输入看起来如何?举几个例子!我知道它必须是有效的数学表达式,还是任何序列f.e.“AND AND AND or 333435553”限定否,它不应该是有效的数学表达式,只有AND AND or可接受的单词sokay。我假设您也必须验证表达式?也许您可以创建一个简单的解析器类,在出现错误字符时返回错误?无论如何,您需要检查括号是否匹配等。检查以下内容以解析和计算表达式:如果我输入4343和213,它不允许我,返回false@antohoho,我只是添加了额外的逃逸。再试一次,说得好。谢谢你的链接。我只是不想在这里解决这个问题。
true
true
true
true
false