我试图在问题历史中找到我的问题的答案,但他们只是回来了一千多个,在扫描了几十个匹配的答案后我放弃了.所以这是我的问题.
我希望能够在字符串中找到正好六位数的第一个序列.鉴于字符串"一些文本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; 但是你的一条评论表明,数字可能会紧接在繁体中文字符之前或后面,繁体中文字符被认为是单词字符(因此不会触发单词边界),所以我改变了这一点.
您正在寻找的模式是:
(?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)
如果您有中文文本.