我有一个字符串"主页333-666-8888请勿打扰"并希望从字符串中提取数字。为此,我在Java中找到了具有ReplaceAll功能的解决方案。
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与正则表达式的工作原理吗?
答案 0 :(得分:1)
您认为^
表示匹配字符串的开头,对吧?嗯,事实是, 匹配字符串的开头,除非放在字符类中。如果它位于字符类([]
)内,则表示“除此字符类中的字符外的任何内容”。因此,你的正则表达式实际上匹配除了字符串中的电话号码部分以外的所有内容,并用空字符串替换除电话号码部分以外的所有内容!
即使它确实意味着匹配字符串的开头,它也不会像你预期的那样工作。因为您的字符串不是以0-9-
开头的。
因此,要解决此问题,只需删除^
。
答案 1 :(得分:0)
您对replaceAll方法的理解是正确的 试试这个:
String ab =“333-666-8888”;
String bc = ab.replaceAll(“[0-9-]”,“”);