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

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

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

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

先感谢您

您可以使用模式(? ,这意味着“一个字符串位置前面没有数字;后面跟着正好六位数字;后跟一个字符串 -没有数字的位置“。 (符号(? ,称为负后瞻性断言 ,意思是“前面没有... ”。符号(?!...) ,称为负前瞻断言 ,意思是“没有跟随” by ... “。符号\d表示数字。符号{n}表示” n次“,因此例如\d{6}表示”六位数“。)

这看起来像这样:

 final String number; { final Matcher m = Pattern.compile("(? 

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

您正在寻找的模式是:

 (?x) # enable comments (? 

那也会有类似的东西

 U+FF10 ‭ 0 FULLWIDTH DIGIT ZERO U+FF11 ‭ 1 FULLWIDTH DIGIT ONE U+FF12 ‭ 2 FULLWIDTH DIGIT TWO U+FF13 ‭ 3 FULLWIDTH DIGIT THREE U+FF14 ‭ 4 FULLWIDTH DIGIT FOUR U+FF15 ‭ 5 FULLWIDTH DIGIT FIVE U+FF16 ‭ 6 FULLWIDTH DIGIT SIX U+FF17 ‭ 7 FULLWIDTH DIGIT SEVEN U+FF18 ‭ 8 FULLWIDTH DIGIT EIGHT U+FF19 ‭ 9 FULLWIDTH DIGIT NINE 

如果您有中文文本。

您发布的字符串中第一次出现6位数字实际上是987654 。 如果您的意思是第一次出现的6位数字由不是数字的字符包围,那么这应该有效:

 (? 

编辑:这种方法使用负面的后观和负面的前瞻。 它与单词边界方法略有不同,因为它将匹配以下字符串中的123456

 123456asdf some text hello another string a123456 aaaaaaaa 

如果数字总是被空格包围,那么单词边界方法可能更好。

  public static String splitting(String str, int num){ String arr[] = str.split("[^0-9]"); for(String s:arr) if(s.length() == num) return s; return null; } 

测试

  public static void main(String[] args) { String s = "Some text 987654321 and some more text 123456 and some other text again 654321 and more text in the end"; System.out.println(splitting(s, 6)); } 

输出是

  123456 

在Javascript控制台中工作。 注意\\d

 replacedString = "rx14ax145N".replace(RegExp("x14(?!\\d)", "g"), "___"); r___ax145N