Пытаясь понять границы слова - PullRequest
0 голосов
/ 05 марта 2012

Я изучаю регулярные выражения и, в частности, границы слов. У меня есть фрагмент кода, который, по моему мнению, должен вернуть хотя бы одно совпадение, но это не так.

Что не так с кодом, который я использовал

public static void main(String[] args) 
{
    boolean matches;
    String [] various = {"Men of honour", "X Men", "Children of men", "Company men are great"}; 

    for(int i = 0; i < various.length; i++)
    {
        matches = Pattern.matches("\\bMen", various[i]);

        System.out.println("Does the string match the pattern? " + matches);
    }



}

выход следующий:

Does the string match the pattern? false
Does the string match the pattern? false
Does the string match the pattern? false
Does the string match the pattern? false

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Это не из-за границ слова.Это связано с тем, что для метода .matches() требуется строка whole .Он не может извлечь подсовпадения.

Вы хотите что-то вроде

Pattern regex = Pattern.compile("\\bMen", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
for(int i = 0; i < various.length; i++)
{
    Matcher regexMatcher = regex.matcher(various[i]);
    matches = regexMatcher.find();
    System.out.println("Does the string match the pattern? " + matches);
}
1 голос
/ 05 марта 2012

Когда вы используете .matches(), вы спрашиваете движок регулярных выражений, соответствует ли ваш шаблон всей входной строке. Однако вы хотите знать, можно ли найти ваш шаблон где-то внутри входной строки.

Использование:

Pattern.compile("\\bMen").matcher(various[i]).find()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...