【问题标题】:Java regex match with slashJava 正则表达式与斜杠匹配
【发布时间】:2015-03-15 17:31:12
【问题描述】:

我想匹配单词“N/A”或“None”。

所以我用了

public static final String NA = "/^(n\\/a|none)$/i";

它在 java 中不起作用。你能帮忙吗?

【问题讨论】:

  • 正则表达式= (?i)n[/|\\]a|none, 字符串文字= (?i)n[/|\\\\]a|none
  • 您要找到这些词,还是要测试整个字符串是否是这些词之一?

标签: java regex string match


【解决方案1】:

Java 不使用/ 作为正则表达式文字。 (无需逃避/ 本身)。如果要忽略大小写,可以在正则表达式中使用修饰符(?i)

String NA = "^(?i)(n/a|none)$";

或者,您可以在编译模式时使用Pattern.CASE_INSENSITIVE

String NA = "^(n/a|none)$";
Pattern p = Pattern.compile(NA, Pattern.CASE_INSENSITIVE);

【讨论】:

  • @Feng,不客气。顺便说一句,我忘了提到你不需要逃避/
【解决方案2】:

要匹配 Java 中的“N/A”或“None”,请使用:

(?i)\b(?:n/a|none)\b

作为转义的 java 字符串:

"(?i)\\b(?:n/a|none)\\b"

【讨论】:

    【解决方案3】:

    检查正斜杠或反斜杠

    正则表达式可以写成(?i)n[/|\\]a|none

    要在字符串中使用它,您需要转义反斜杠:

    String pattern = "(?i)n[/|\\\\]a|none";
    
    String[] array = 
        {
            "N/a",
            "n\\a",
            "NonE",
            "na"
        };
    
    for(String item : array)
    {
        System.out.println("\"" + item + "\" = " + item.matches(pattern));
    }
    

    控制台:

    "N/a" = true
    "n\a" = true
    "NonE" = true
    "na" = false
    

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多