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