java - 正则表达式中的字边界

标签 java regex

我使用以下正则表达式:

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/

相关文章:

regex - 我可以使用交替将多少个正则表达式链接在一起?

javascript - 如何使用正则表达式基于泛型类型从字符串中删除完整行

java - 如何在java中的正则表达式模式末尾分割字符串

java - 如何强制 Java 调用接受不可为空参数的重载 Kotlin 方法?

java - 为什么我的 BigDecimal 计算不起作用?

java - GridLayout 的问题

php - 使用正则表达式的复杂 SQL 查询

JavaScript 土耳其手机号码验证

java - 读写对象链表

java - 从 Java 方法返回多个值 : why no n-tuple objects?