我试图匹配一些具有简单结构的短字符串代码:

  • 5 位数字
  • 冒号
  • 一些字母
  • 空格或下划线
  • 一些数字。

  • 我想使用 Pattern.COMMENT 选项来格式化我的模式:
    String pat = "(?x) ([0-9]{5}) : ([a-zA-Z]+ [_ ] [0-9]+) ";
    

    这种模式在 https://regex101.com/r/oW8vQ4/1 上运行良好。

    但是,在 Java 中,这一行:
    "31500:STR 200".matches(pat)
    

    产生错误。

    为什么这里返回false?即使 [_ ] 在字符类中启用,Pattern.COMMENT 也不应该与空格匹配吗?

    最佳答案

    我认为问题在于您需要对字符类中的空间进行转义。来自 http://www.regular-expressions.info/freespacing.html



    试试这个模式 - 只是在空格前添加了 \\ ......但我自己没有测试过。

    String pat = "(?x) ([0-9]{5}) : ([a-zA-Z]+ [_\\ ] [0-9]+) ";
    

    关于java - 为什么模式会忽略字符类中的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38808219/

    10-16 21:51