我使用以下正则表达式:
if (input.matches("^[\\d\\s()\bAND\b\bOR\b.]+$")) {
// do something
}
我的目标是仅验证数字(整数和小数)、空格、( )、点、AND、OR。 其他一切都是不允许的。 看起来好像有效,但我遇到了单词边界\bAND\b 和\bOR\b 的问题 例如。我不能不输入 ANDWE 或 EEE 或任何组合,但我可以输入 AN 或 A。 如何在字符串中只允许两个单词 AND 或 OR?它们在字符串中是可选的。
输入示例
0.10 和 23 - 有效
12 AND (15 OR 0.2) - 有效
12 或 190 - 有效
12 AND AND 12 - 有效
12 A 233 - 荣军
最佳答案
您需要数字、空格、括号、点、AND 和 OR。
这是一种方法,通过指定字符类中的单个字符,并使用 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));
}
}
输出:
true
true
true
true
false
关于java - 正则表达式中的字边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230678/