Java REGEX匹配字符串中的确切位数

Jul*_*ian 7 java regex

我试图在问题历史中找到我的问题的答案,但他们只是回来了一千多个,在扫描了几十个匹配的答案后我放弃了.所以这是我的问题.

我希望能够在字符串中找到正好六位数的第一个序列.鉴于字符串"一些文本987654321和一些其他文本123456和一些其他文本再次654321和更多文本到底"我想找到将匹配123456序列的正则表达式.

我是正则表达式的新手,关于它如何工作的简短解释将有很大帮助.

先感谢您

rua*_*akh 15

您可以使用模式(?<!\d)\d{6}(?!\d),这意味着"一个字符串位置,前面没有数字;后跟正好六位数字;后跟一个字符串位置,后面没有数字".(符号(?<!...),称为负后瞻性断言,意思是"不在前面...".符号(?!...),称为负前瞻断言,意思是"没有后跟...".符号\d表示数字.符号{n}表示" n次",所以这\d{6}意味着"六位数".)

这看起来像这样:

final String number;
{
    final Matcher m = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)").matcher(input);
    if(m.find())
        number = m.group(); // retrieve the matched substring
    else
        number = null; // no match found
}
Run Code Online (Sandbox Code Playgroud)

注意:此答案的先前版本建议使用单词边界\b; 但是你的一条评论表明,数字可能会紧接在繁体中文字符之前或后面,繁体中文字符被认为是单词字符(因此不会触发单词边界),所以我改变了这一点.


tch*_*ist 6

您正在寻找的模式是:

(?x)              # enable comments
(?<! \p{Nd} )     # no decimal number before
\p{Nd} {6}        # exactly six repetitions of a decimal number
(?!= \p{Nd} )     # no decimal number after
Run Code Online (Sandbox Code Playgroud)

那也会有所收获

U+FF10 ? ? FULLWIDTH DIGIT ZERO
U+FF11 ? ? FULLWIDTH DIGIT ONE
U+FF12 ? ? FULLWIDTH DIGIT TWO
U+FF13 ? ? FULLWIDTH DIGIT THREE
U+FF14 ? ? FULLWIDTH DIGIT FOUR
U+FF15 ? ? FULLWIDTH DIGIT FIVE
U+FF16 ? ? FULLWIDTH DIGIT SIX
U+FF17 ? ? FULLWIDTH DIGIT SEVEN
U+FF18 ? ? FULLWIDTH DIGIT EIGHT
U+FF19 ? ? FULLWIDTH DIGIT NINE
Run Code Online (Sandbox Code Playgroud)

如果您有中文文本.

  • 非常好:全球化支持+1,不受空白限制. (2认同)