首页 > 代码库 > 正则表达式
正则表达式
Pattern是要符合的模式
Matcher是用这种模式去匹配字符串产生的结果
String类本身就有matches这个方法,表示这个字符串是不是匹配这种模式(模式也是一个传入的String)
一些基本是
\d 表示一个数字 example "a4dfds323".replaceAll("\\d","-") 前面那个‘\‘是转义字符
. 任何一个字符,并不包含行结束符
\D 不是数字的一个字符
\s 空白字符 包含[\t\n\f\r]
\S 不是空白字符
\w a word char [a-zA-Z_0-9]
\W a non-word char
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
对于Email的匹配:
public static final Pattern EMAIL_ADDRESS = Pattern.compile( "[a-zA-Z0-9\\+\\.\\_\\%\\-]{1,256}" + //这个含义是至少有一个[a-zA-Z0-9] 然后可以有. _ % - "\\@" + //中间@ "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + // "(" + "\\." + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+" );
关于PhoneNumber的匹配:
public static final Pattern PHONE = Pattern.compile( // sdd = space, dot, or dash "(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>* + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>* p("()".matches("\\(\\)"))为true,括弧前必须加\ + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
如果匹配一个空白行
public static void main(String[] args) { p(" \n".matches("^[\\s&&[^\\n]]+\\n$")); //^代表开头 ,$表示结尾 true } public static void p(Object s) { System.out.println(s); }
Pattern p = Pattern.compile("\\d{3,5}[a-z]{2}"); String s = "123aa-23434bb-234cc-00"; Matcher m = p.matcher(s); while(m.find()){ p(m.group()); } 会打印出结果 123aa 23434bb 234cc
如果我们只想要数字 我们必须把pattern改成:
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})"); String s = "123aa-23434bb-234cc-00"; Matcher m = p.matcher(s); while(m.find()){ p(m.group(1)); } 结果: 123 23434 234
第一个左小括号是第一组,第二个小左括号是第二组
写一个比较简单的email的匹配:
p("sdfsdfsdfsdfsdf@163.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+")); true \\w为单词字符
关于Find:
Pattern p = Pattern.compile("\\d{3,5}"); String s = "123-34343-3434-00"; Matcher m = p.matcher(s); // p(m.matches()); //false matches会跟find会冲突 // m.reset(); p(m.find()); //true 123 //想知道起始位置和结束位置 p(m.start()+"-"+m.end()); //0-3 p(m.find()); //true 34343 p(m.start()+"-"+m.end()); //4-9 p(m.find()); //true 3434 p(m.start()+"-"+m.end()); p(m.find()); //false 00 // p(m.start()+"-"+m.end()); //输出这个会报错 p(m.lookingAt()); //每一次找从开始的位置找,true p(m.lookingAt()); //每一次找从开始的位置找,true
关于替换:
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE); StringBuffer buf = new StringBuffer(); Matcher m = p.matcher("sfsdjavaeereJAVAdsfd"); //要求把第一个小写的java换成大写的,第二个大写的JAVA换成小写的 int i = 0; while(m.find()) { i++; if(i%2== 0) { m.appendReplacement(buf, "java"); }else{ m.appendReplacement(buf, "JAVA"); } } m.appendTail(buf); p(buf);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。