正则表达式匹配一定长度的单词

Ana*_*ige 58 java regex

我想知道正则表达式匹配单词,使单词具有最大长度.例如,如果一个单词的长度最多为10个字符,我希望正则表达式匹配,但如果长度超过10,则正则表达式不匹配.

我试过了

^(\w{10})$
Run Code Online (Sandbox Code Playgroud)

但只有当单词的最小长度为10个字符时,才会给我带来匹配.如果单词超过10个字符,它仍然匹配,但只匹配前10个字符.

Tik*_*vis 64

我想你想要的\b\w{1,10}\b.该\b单词边界匹配.

当然,你也可以替换\b和做^\w{1,10}$.这将匹配最多10个字符的单词,只要它是字符串的唯一内容即可.我认为这就是你以前做过的事情.

因为它是Java,你实际上必须逃避反斜杠:"\\b\\w{1,10}\\b".你可能已经知道了,但它之前已经让我知道了.


Tim*_*ker 41

^\w{0,10}$ # allows words of up to 10 characters.
^\w{5,}$   # allows words of more than 4 characters.
^\w{5,10}$ # allows words of between 5 and 10 characters.
Run Code Online (Sandbox Code Playgroud)

  • `^`和`$`将正则表达式锚定到字符串的开头和结尾.如果你想提取子匹配(一定长度的单词),那么你需要在它们的位置使用`\ b`字边界锚:`\ b\w {1,10}\b`将找到长度为1的单词10. (4认同)
  • @LoiNguyenHuynh:`^(?:\w{9}|\w{12})$` (2认同)

小智 24

要匹配的字符长度.

{n,m}  n <= length <= m
{n}    length == n
{n,}   length >= n
Run Code Online (Sandbox Code Playgroud)

默认情况下,引擎贪婪以匹配此模式.例如,如果输入为123456789,则\ d {2,5}将匹配12345,长度为5.

如果您希望引擎在长度为2时返回,请使用\ d {2,5}?

  • 这对我很有用,因为我正在寻找正则表达式来查找大于 x 的单词。 (3认同)

Par*_*eep 7

甚至,我正在寻找相同的正则表达式,但我也想包含所有特殊字符和空格。所以这里是正则表达式:

^[A-Za-z0-9\s$&+,:;=?@#|'<>.^*()%!-]{0,10}$
Run Code Online (Sandbox Code Playgroud)

  • 这与“^.{0,10}$”有何不同? (2认同)

Emm*_*mma 7

方法一

单词边界在这里可以完美地工作,例如:

\b\w{3,8}\b
\b\w{2,}
\b\w{,10}\b
\b\w{5}\b
Run Code Online (Sandbox Code Playgroud)

正则表达式演示 1

爪哇

某些语言(例如 Java 和 C++)需要双重转义:

\\b\\w{3,8}\\b
\\b\\w{2,}
\\b\\w{,10}\\b
\\b\\w{5}\\b
Run Code Online (Sandbox Code Playgroud)

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));
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

输出1

Full match: words
Full match: with
Full match: length
Full match: three
Full match: eight
Run Code Online (Sandbox Code Playgroud)

方法二

另一种值得一看的方法是使用否定环视:

(?<!\w)\w{3,8}(?!\w)
(?<!\w)\w{2,}
(?<!\w)\w{,10}(?!\w)
(?<!\w)\w{5}(?!\w)
Run Code Online (Sandbox Code Playgroud)

爪哇

(?<!\\w)\\w{3,8}(?!\\w)
(?<!\\w)\\w{2,}
(?<!\\w)\\w{,10}(?!\\w)
(?<!\\w)\\w{5}(?!\\w)
Run Code Online (Sandbox Code Playgroud)

正则表达式演示 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));
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

输出2

Full match: words
Full match: with
Full match: length
Full match: three
Full match: to
Full match: eight
Run Code Online (Sandbox Code Playgroud)

正则表达式电路

jex.im可视化正则表达式:

在此输入图像描述


如果您希望简化/修改/探索表达式,请在regex101.com的右上角面板上进行解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入进行匹配。