Как проверить, является ли символ границ не-слов - PullRequest
2 голосов
/ 03 июня 2010

В регулярном выражении Java оно имеет "\ B" в качестве границы без слов.

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

Если у меня есть 'char', как я могу проверить, что это граница без слов?

Спасибо.

Ответы [ 5 ]

7 голосов
/ 03 июня 2010

Граница имеет особое значение. Он имеет фактически нулевое совпадение и поэтому не может быть сопоставлен ни одному символу. Он используется для определения положения между несловесным символом и словом-символом. Также см. http://regular -expressions.info / wordboundaries.html .

Однако я понял, что этот вопрос больше связан с тем, может ли данный символ обозначать начало или конец границы слова. От javadoc, который вы связали ( здесь - последняя версия):

Предопределенные классы символов

. Любой символ (может совпадать или не совпадать с ограничителями строки)
\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");
2 голосов
/ 03 июня 2010

Вопрос очень необычный, но это правда, что \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

Последняя строка может удивлять, но такова природа якорей.

Смотри также

1 голос
/ 03 июня 2010

Граница - это позиция между двумя символами, поэтому символ никогда не может быть границей.

Если вы хотите сопоставить символ, который не окружен границами слов, e. г. символ b в abc, тогда вы можете использовать

\B.\B

Не забудьте избежать обратной косой черты в строке Java, как в

Pattern regex = Pattern.compile("\\B.\\B");
1 голос
/ 03 июня 2010
((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))

или если вы хотите, чтобы цифры были также частями слова:

((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
0 голосов
/ 18 ноября 2010

Проверьте этот ответ , чтобы обсудить, что такое граница \b и как заставить вашего регулярного выражения вести себя так, как вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...