我想知道正则表达式匹配单词,使单词具有最大长度。 例如,如果一个单词的长度最多为10个字符,我希望正则表达式匹配,但如果长度超过10,则正则表达式不匹配。
我试过
^(\w{10})$
但只有当单词的最小长度为10个字符时,才会给我带来匹配。如果单词超过10个字符,它仍然匹配,但只匹配前10个字符。
答案 0 :(得分:58)
我想你想要\w{1,10}\b
。 \b
匹配单词边界。
当然,您也可以替换\b
并执行^\w{1,10}$
。这将匹配最多10个字符的单词,只要它是字符串的唯一内容即可。我想这就是你以前做的事情。
因为它是Java,所以你实际上必须转义反斜杠:"\\w{1,10}\\b"
。你可能已经知道了这一点,但它之前让我知道了。
答案 1 :(得分:34)
^\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.
答案 2 :(得分:22)
要匹配的字符长度。
{n,m} n <= length <= m
{n} length == n
{n,} length >= n
默认情况下,引擎很贪婪,无法匹配此模式。例如,如果输入为123456789,则\ d {2,5}将匹配12345,其长度为5.
如果您希望引擎在长度为2时返回,请使用\ d {2,5}?
答案 3 :(得分:0)
即使我一直在寻找相同的正则表达式,但我也想包括所有特殊字符和空格。所以这是正则表达式:
^[A-Za-z0-9\s$&+,:;=?@#|'<>.^*()%!-]{0,10}$
答案 4 :(得分:0)
单词边界在这里非常适用,例如:
\b\w{3,8}\b
\b\w{2,}
\b\w{,10}\b
\b\w{5}\b
某些语言(例如Java和C ++)需要两次转义:
\\b\\w{3,8}\\b
\\b\\w{2,}
\\b\\w{,10}\\b
\\b\\w{5}\\b
PS:\\b\\w{,10}\\b
可能不适用于所有语言或口味。
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));
}
}
}
Full match: words
Full match: with
Full match: length
Full match: three
Full match: eight
另一种值得了解的方法是使用否定性环视:
(?<!\w)\w{3,8}(?!\w)
(?<!\w)\w{2,}
(?<!\w)\w{,10}(?!\w)
(?<!\w)\w{5}(?!\w)
(?<!\\w)\\w{3,8}(?!\\w)
(?<!\\w)\\w{2,}
(?<!\\w)\\w{,10}(?!\\w)
(?<!\\w)\\w{5}(?!\\w)
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));
}
}
}
Full match: words
Full match: with
Full match: length
Full match: three
Full match: to
Full match: eight
jex.im可视化正则表达式:
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。