2017-09-16 102 views
-2

我有一个字符串“Home 333-666-8888请勿打扰”,并且希望从字符串中提取数字。为此,我找到了Java中的ReplaceAll功能的解决方案。在Java中使用正则表达式替换所有功能

String ab="Home 333-666-8888 Do Not Disturb"; 

String bc=ab.replaceAll("[^0-9-]", ""); 

,这让我333-666-8888

我关心的是如何replaceAll功能的实际工作?我曾经假设它会将空白符合正则表达式的内容替换掉,并返回给我Home Do Not Disturb。但它给我333-666-8888。任何人都可以帮助我理解replaceAll与正则表达式的作用吗?

+1

'^'在正则表达式中的含义是什么? –

+1

投票结束的理由是,您的问题归结为拼写错误,因此不可能对未来的读者有所帮助。 –

+0

^基本上是正则表达式中字符串的开始 – NewGeekInTown

回答

1

你认为^意味着匹配字符串的开始,对吧?那么,事实是,它确实匹配字符串的开始,除了当放置在一个字符类。如果它在一个字符类([])内,则表示“除此字符类中的字符外的任何内容”。因此,您的正则表达式实际上匹配除您的字符串中的电话号码部分之外的所有内容,并用空字符串替换除电话号码部分以外的所有内容!

即使它确实意味着匹配字符串的开头,它也不会像您期望的那样工作。因为您的字符串不以0-9-开头。

所以要解决这个问题,只需删除^

+0

非常感谢解释@清扫器..Helped Alot! :) – NewGeekInTown

+0

@NewGeekInTown如果您认为我的答案回答了您的问题,请考虑点击该选中标记来接受它! – Sweeper

+0

完成Bro!非常感谢.. – NewGeekInTown

0

你有关的replaceAll方法的理解是正确的 试试这个:

字符串AB = “333-666-8888”;

String bc = ab.replaceAll(“[0-9-]”,“”);