Регулярное выражение для сопоставления слов определенной длины

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

Я пробовал

^(\w{10})$

, но это дает мне совпадения, только если минимальная длина слова составляет 10 символов. Если слово содержит более 10 символов, оно все равно совпадает, но соответствует только первым 10 символам.

57
задан Alfabravo 20 November 2015 в 21:44
поделиться

1 ответ

Метод 1

границы Word работал бы отлично здесь, такой как с:

\b\w{3,8}\b
\b\w{2,}
\b\w{,10}\b
\b\w{5}\b

Демонстрация RegEx 1

Java

Некоторые языки, такие как Java и C++ являются требуемым двойным Escape:

\\b\\w{3,8}\\b
\\b\\w{2,}
\\b\\w{,10}\\b
\\b\\w{5}\\b

<глоток> PS: \\b\\w{,10}\\b может не работать на все языки или разновидности.

Тест 1

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){


        final String regex = "\\b\\w{3,8}\\b";
        final String string = "words with length three to eight";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
        }

    }
}

Вывод 1

Full match: words
Full match: with
Full match: length
Full match: three
Full match: eight
<час>

Метод 2

Другой хороший для знания метод должен использовать отрицательный lookarounds:

(?<!\w)\w{3,8}(?!\w)
(?<!\w)\w{2,}
(?<!\w)\w{,10}(?!\w)
(?<!\w)\w{5}(?!\w)

Демонстрация Java

(?<!\\w)\\w{3,8}(?!\\w)
(?<!\\w)\\w{2,}
(?<!\\w)\\w{,10}(?!\\w)
(?<!\\w)\\w{5}(?!\\w)

RegEx 2

Тест 2

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){


        final String regex = "(?<!\\w)\\w{1,10}(?!\\w)";
        final String string = "words with length three to eight";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
        }

    }
}

Вывод 2

Full match: words
Full match: with
Full match: length
Full match: three
Full match: to
Full match: eight

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

<час>

, Если Вы хотите упростить/изменить/исследовать выражение, оно было объяснено на верхней правой панели [1 113] regex101.com . Если бы Вы хотели бы, можно также смотреть в [1 114] эта ссылка , как она соответствовала бы против некоторых демонстрационных исходных данных.

<час>
0
ответ дан 24 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: