黑马程序员——java基础——正则表达式

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------正则表达式


正则表达式:
    (1)概述:就是符合一定规则的字符串
    (2)常见规则
        A:字符
            x 字符 x。举例:'a'表示字符a
            \\ 反斜线字符。
            \n 新行(换行)符 ('\u000A')
            \r 回车符 ('\u000D')
            
        B:字符类
            [abc] a、b 或 c(简单类)
            [^abc] 任何字符,除了 a、b 或 c(否定)
            [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
            [0-9] 0到9的字符都包括
            
        C:预定义字符类
            . 任何字符。我的就是.字符本身,怎么表示呢? \.
            \d 数字:[0-9]
            \w 单词字符:[a-zA-Z_0-9]
                在正则表达式里面组成单词的东西必须有这些东西组成

        D:边界匹配器
            ^ 行的开头
            $ 行的结尾
            \b 单词边界
                就是不是单词字符的地方。
                举例:hello world?haha;xixi
            
        E:Greedy 数量词
            X? X,  一次或一次也没有
            X* X,  零次或多次
            X+ X, 一次或多次
            X{n} X,恰好 n 次
            X{n,} X,至少 n 次
            X{n,m} X,至少 n 次,但是不超过 m 次
    (3)常见功能:
        A:判断功能
            String类的  public boolean matches(String regex)
        B:分割功能
            String类的  public String[] split(String regex)
        C:替换功能
            String类的  public String replaceAll(String regex,String replacement)
        D:获取功能
            Pattern和Matcher
                Pattern p = Pattern.compile("a*b");
                Matcher m = p.matcher("aaaaab");
                
                find():查找存不存在
                group():获取刚才查找过的数据
    (4)案例
        A:判断QQ号码

<span style="font-size:18px;">public class RegexDemo {
	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的QQ号码:");
		String qq = sc.nextLine();
		
		System.out.println("checkQQ:"+checkQQ(qq));
	}

       public static boolean checkQQ(String qq) {
		boolean flag = true;

		// 校验长度
		if (qq.length() >= 5 && qq.length() <= 15) {
			// 0不能开头
			if (!qq.startsWith("0")) {
				// 必须是数字
				char[] chs = qq.toCharArray();
				for (int x = 0; x < chs.length; x++) {
					char ch = chs[x];
					if (!Character.isDigit(ch)) {
						flag = false;
						break;
					}
				}
			} else {
				flag = false;
			}
		} else {
			flag = false;
		}

		return flag;
	}
}</span>


        B:按照不同的规则分割数据

<span style="font-size:18px;">public class RegexDemo2 {
	public static void main(String[] args) {
		// 定义一个字符串
		String s1 = "aa,bb,cc";
		// 直接分割
		String[] str1Array = s1.split(",");
		for (int x = 0; x < str1Array.length; x++) {
			System.out.println(str1Array[x]);
		}
		System.out.println("---------------------");

		String s2 = "aa.bb.cc";
		String[] str2Array = s2.split("\\.");
		for (int x = 0; x < str2Array.length; x++) {
			System.out.println(str2Array[x]);
		}
		System.out.println("---------------------");

		String s3 = "aa    bb                cc";
		String[] str3Array = s3.split(" +");
		for (int x = 0; x < str3Array.length; x++) {
			System.out.println(str3Array[x]);
		}
		System.out.println("---------------------");
		
		//硬盘上的路径,我们应该用\\替代\
		String s4 = "E:\\JavaSE\\day14\\avi";
		String[] str4Array = s4.split("\\\\");
		for (int x = 0; x < str4Array.length; x++) {
			System.out.println(str4Array[x]);
		}
		System.out.println("---------------------");
	}
}
</span>


        C:把论坛中的数字替换为*

<span style="font-size:18px;">public class RegexDemo {
    public static void main(String[] args) {
        // 定义一个字符串
        String s = "helloqq12345worldkh622112345678java";

        // 我要去除所有的数字,用*给替换掉
         String regex = "\\d+";
         String ss = "*";
              
         String result = s.replaceAll(regex, ss);

         System.out.println(result);

    }
}</span>


        D:获取字符串中由3个字符组成的单词

<span style="font-size:18px;">public class RegexDemo2 {
	public static void main(String[] args) {
		// 定义字符串
		String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
		// 规则
		String regex = "\\b\\w{3}\\b";

		// 把规则编译成模式对象
		Pattern p = Pattern.compile(regex);
		// 通过模式对象得到匹配器对象
		Matcher m = p.matcher(s);
		

		while (m.find()) {
			System.out.println(m.group());
		}

		// 注意:一定要先find(),然后才能group()
		  String ss = m.group();
		  System.out.println(ss);
	}
}</span>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript正则表达式Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值