在Java正则表达式中,它具有“\ B”作为非单词边界。
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
如果我有'char',我怎么检查它是非字边界?
谢谢。
答案 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
边界究竟是什么,以及如何将正则表达式更好地按照您希望的方式行事。