Java中使用正则表达式
1、使用 java.util.regex.Pattern 类的 compole(表达式) 方法把正则表达式变成一个对象。
//表达式对象:1个数字和1个字母连续 Pattern pattern = Pattern.compile("\\d[a-z]");
2、通过Pattern 对象获取java.util.regex.Matcher 类对象,使用Matcher对象进行相应匹配操作。
//匹配器,指定要解析的字符串datas Matcher matcher = pattern.matcher(datas);
常用方法:
matches():判断整个字符串是否符合表达式对象。
matcher.find():判断是字符串中是否存在下一个符合要求的字符串。
group():返回在上一次匹配操作期间由给定组捕获的输入子序列。无参时默认为0,即第1组捕获组,若参数为1,则为第2组捕获组。
replaceAll(String str);使用指定字符串替换符合表达式的字符。
3、String类中的 split (String str)方法,支持参数为正则表达式。
测试:
public class Client { public static void main(String[] args) { //要处理的字符串 String datas = "111aaa222bbb333ccc"; System.out.println("待处理字符串:"+datas); //表达式对象:1个数字和1个字母连续 Pattern pattern = Pattern.compile("\\d[a-z]"); //匹配器,指定要解析的字符串datas Matcher matcher = pattern.matcher(datas); //判断整个字符串是否符合表达式对象 System.out.println("整个字符串是否符合:"+matcher.matches()); //在字符串中寻找下一个符合要求的对象,有则返回true while (matcher.find()){ //取出匹配到的字符串 System.out.println("符合的:"+matcher.group());//group(1)表示正则中的()()第二个捕获组的内容,以此类推。 } //符合表达式的使用指定字符串替换替换 String end = matcher.replaceAll("A"); System.out.println("替换后:"+end); //分割字符串,使用正则表达式 String me = "love0dlove0alove"; String[] mes = me.split("0[a-z]"); for (String s:mes){ System.out.print(s); } } }
测试结果:
获取网页内的的url地址
代码:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Client { public static void main(String[] args) { getUrl(getString("https://www.cnblogs.com/","utf-8")); } /** * 给我一个字符串,我给你解析里面的url地址 * @param str */ public static void getUrl(String str){ //创建正则表达式对象 Pattern pattern = Pattern.compile("[a-zA-z]+://[^\\s^\"^\']*"); //匹配器 Matcher matcher = pattern.matcher(str); while (matcher.find()){ //取出匹配到的字符串 System.out.println("符合的:"+matcher.group()); } } /** * 给我一个网页地址,我把它网页内容用字符串给你。 * 记得指定字符集! * @param netAddress * @param charset * @return */ public static String getString(String netAddress,String charset){ StringBuilder sb = new StringBuilder(); URL url = null; try { url = new URL(netAddress); } catch (MalformedURLException e) { e.printStackTrace(); } try (BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream(), Charset.forName(charset)));){ String temp =null; while ((temp=br.readLine())!=null){ sb.append(temp); } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } }
运行结果: