如何检查字符是否是非字边界

时间:2010-06-02 21:03:20

标签: java regex

在Java正则表达式中,它具有“\ B”作为非单词边界。

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

如果我有'char',我怎么检查它是非字边界?

谢谢。

5 个答案:

答案 0 :(得分:7)

边界具有特殊含义。它实际上是一个零长度匹配,因此不能匹配单个字符。它用于确定非单词char和word-char之间的位置。另请参阅http://regular-expressions.info/wordboundaries.html

然而,我知道这个问题更多的是给定的char是否可能表示单词边界的开头或结尾。从您链接的javadoc(here是最新版本):

  

预定义的字符类

     

.任何字符(可能与行终止符匹配也可能不匹配)
  \d数字:[0-9]
  \D非数字:[^0-9]
  \s一个空白字符:[ \t\n\x0B\f\r]
  \S非空白字符:[^\s]
  \w一个字符:[a-zA-Z_0-9]
  \W非单词字符:[^\w]

因此,单词字符与\w匹配。非单词字符与\W匹配。所以:

String string = String.valueOf(yourChar);
boolean nonWordCharacter = string.matches("\\W");

答案 1 :(得分:2)

这个问题非常特殊,但\w本身就被\b包围了。同样,\W本身也被\B包围。因此,出于单词边界定义的目的,^$是非单词字符。

    System.out.println("a".matches("^\\b\\w\\b$")); // true
    System.out.println("a".matches("^\\b\\w\\B$")); // false
    System.out.println("a".matches("^\\B\\w\\b$")); // false
    System.out.println("a".matches("^\\B\\w\\B$")); // false

    System.out.println("@".matches("^\\b\\W\\b$")); // false
    System.out.println("@".matches("^\\b\\W\\B$")); // false
    System.out.println("@".matches("^\\B\\W\\b$")); // false
    System.out.println("@".matches("^\\B\\W\\B$")); // true

    System.out.println("".matches("$$$$\\B\\B\\B\\B^^^")); // true

最后一行可能令人惊讶,但这就是锚的本质。

另见

答案 2 :(得分:1)

((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))

或者如果您希望数字也是单词的一部分:

((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))

答案 3 :(得分:1)

边界是两个字符之间的位置,因此字符永远不能成为边界。

如果要匹配未被字边界包围的字符,请执行以下操作: G。 b中的字符abc,您可以使用

\B.\B

请记住在Java字符串中转义反斜杠,如

Pattern regex = Pattern.compile("\\B.\\B");

答案 4 :(得分:0)

检查this answer,了解\b边界究竟是什么,以及如何将正则表达式更好地按照您希望的方式行事。