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