java:正则表达式
Posted 咫尺天涯是路人丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java:正则表达式相关的知识,希望对你有一定的参考价值。
* 字符串支持正则表达式的方法
* matches(String regex):将字符串与指定的正则表达式进行匹配,匹配成功返回true,否则返回false
*
* 电话号码的校验:3为区号+8位电话号码 4位区号+7位电话号码
* 010-12345678(01012345678) 021-12345678 027-12345678 029-12345678....
* 0371-1234567(03711234567)
* 网址校验:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
* http://www.baidu.com
* http://www.baidu.com/index.html
public class TestVertify2 { /** * 校验电话号码 * @param tel */ public static boolean checkTel(String tel){ // String regex="\\d{3,4}-?\\d{7,8}"; String regex="((0[12]\\d{1})-?\\d{8})|(0\\d{3})-?\\d{7}"; return tel.matches(regex); } /** * 校验网址:http://www.baidu.com * @param url * @return */ public static boolean checkURL(String url){ String regex="http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"; return url.matches(regex); } /** * 校验QQ号码 * @param qq * @return */ public static boolean checkQQ(String qq){ String regex="[1-9]\\d{4,14}"; return qq.matches(regex); } public static void main(String[] args) { // boolean is = checkTel("021-12345678"); boolean is = checkURL("http://www.baidu.com/index.html"); System.out.println(is); } }
* 字符串中支持正则表达式的常用方法:
* ***matches(String regex):将字符串与指定的正则表达式进行匹配,匹配成功返回true,否则返回false
* **replaceAll(String regex, String replacement)
* 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
* replaceFirst(String regex, String replacement)
* 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
* split(String regex)
* 根据给定正则表达式的匹配拆分此字符串。
public class TestString { public static void testReplace(){ String str="我是张三,我的QQ:12345,我的电话是:0371-1234567"; String regex="\\d+"; // str = str.replaceAll(regex, "#"); str = str.replaceFirst(regex, "#"); System.out.println(str); } public static void testSplit(){ String str="java,html,,oracle,,,mysql,,,,javascript"; String regex=",+";//可以匹配一次或多次逗号 String[] strs = str.split(regex); for (String string : strs) { System.out.println(string); } } public static void main(String[] args) { testSplit(); } }
*ava.util.regex 包主要包括以下二个类:
Pattern 类:
pattern 对象是一个正则表达式的编译表示。
Pattern 类没有公共构造方法。要创建一个 Pattern 对象,
你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
常用的方法:
compile(String regex) 将给定的正则表达式编译到模式中。
matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。
matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。
与Pattern 类一样,Matcher 也没有公共构造方法。
你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
常用方法:
find() 尝试查找与该模式匹配的输入序列的下一个子序列。
public class TestRegex { public static void testPattern(){ String content="bjsxt java is good school!"; String regex = ".*java.*"; boolean isMatcher= Pattern.matches(regex, content); System.out.println("是否包含‘java‘子字符串:"+isMatcher); } public static void testMatches(){ String line = "This order was placed for QT3000! OK?"; String regex = "(\\D*)(\\d+)(.*)"; //1.创建Pattern对象 Pattern pattern = Pattern.compile(regex); //2.创建Mather对象 Matcher matcher=pattern.matcher(line); if(matcher.find()){ System.out.println("第一组:"+matcher.group(0)); System.out.println("第二组:"+matcher.group(1)); System.out.println("第三组:"+matcher.group(2)); System.out.println("第四组:"+matcher.group(3)); } } public static void main(String[] args) { // testPattern(); testMatches(); } }
eg:
*网络爬虫:将网易主页源码上的超级链接提取出来。
*1.获取网页主页的源码
*2.使用正则表达式进行匹配源码,将超级链接提取
public class WebSipder { public static void main(String[] args) { try { //获取网易源码 URL url = new URL("http://www.163.com"); InputStream ips = url.openStream(); InputStreamReader isr = new InputStreamReader(ips); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String str; while((str=br.readLine())!=null){ sb.append(str+"\n"); } // System.out.println(sb); //从源码中提取网址 http://yuedu.163.com String regex="http://\\w*\\.*\\w*\\.com"; //创建一个pattern对象(正则表达式) Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(sb); while(matcher.find()){ String address = matcher.group(); System.out.println(address); } br.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
以上是关于java:正则表达式的主要内容,如果未能解决你的问题,请参考以下文章