精华内容
下载资源
问答
  • 主要介绍了Java中使用正则表达式获取网页中所有图片的路径,本文直接给出实例代码,需要的朋友可以参考下
  • 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习。 什么是正则表达式? 正则表达式定义字符串的模式。 正则表达式可用于搜索,编辑或处理文本。 正则表达式不是特定于语言的,...

    当我开始使用Java时,正则表达式对我来说是一场噩梦。 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习。

    什么是正则表达式?

    正则表达式定义字符串的模式。 正则表达式可用于搜索,编辑或处理文本。 正则表达式不是特定于语言的,但是每种语言的正则表达式略有不同。 Java正则表达式与Perl最相似。

    Java正则表达式类存在于java.util.regex软件包中,该软件包包含三个类: PatternMatcherPatternSyntaxException

    1.模式对象是正则表达式的编译版本。 它没有任何公共构造函数,我们使用其公共静态方法compile通过传递正则表达式参数来创建模式对象。

    2. Matcher是将输入的字符串模式与创建的模式对象进行匹配的正则表达式引擎对象。 此类没有任何公共构造函数,并且我们使用模式对象匹配器方法(将输入String作为参数)来获得Matcher对象。 然后,我们使用matchs方法根据输入的String是否匹配正则表达式模式返回布尔结果。

    3.如果正则表达式语法不正确,则会引发PatternSyntaxException。

    让我们通过一个简单的示例查看所有这些类的作用:

    package com.journaldev.util;
    
    import java.util.regex.*;
    
    public class PatternExample {
    
    	public static void main(String[] args) {
    		Pattern pattern = Pattern.compile('.xx.');
    		Matcher matcher = pattern.matcher('MxxY');
    		System.out.println('Input String matches regex - '+matcher.matches());
    		// bad regular expression
    		pattern = Pattern.compile('*xx*');
    
    	}
    
    }

    上面程序的输出是:

    Input String matches regex - true
    Exception in thread 'main' java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
    *xx*
    ^
    	at java.util.regex.Pattern.error(Pattern.java:1924)
    	at java.util.regex.Pattern.sequence(Pattern.java:2090)
    	at java.util.regex.Pattern.expr(Pattern.java:1964)
    	at java.util.regex.Pattern.compile(Pattern.java:1665)
    	at java.util.regex.Pattern.(Pattern.java:1337)
    	at java.util.regex.Pattern.compile(Pattern.java:1022)
    	at com.journaldev.util.PatternExample.main(PatternExample.java:13)

    由于正则表达式围绕String展开,因此Java 1.4中对String类进行了扩展,以提供进行模式匹配的match方法。 在内部,它使用Pattern和Matcher类进行处理,但是显然,它减少了代码行。

    模式类还包含matches方法,该方法以正则表达式和输入String作为参数,并在匹配它们后返回布尔结果。

    因此,以下代码可以很好地将输入String与正则表达式匹配。

    String str = 'bbb';
    		System.out.println('Using String matches method: '+str.matches('.bb'));
    		System.out.println('Using Pattern matches method: '+Pattern.matches('.bb', str));

    因此,如果您只需要检查输入的String是否与模式匹配,则应使用简单的String Match方法来节省时间。 仅在需要操纵输入String或需要重用模式时,才使用Pattern和Matches类。

    请注意,由正则表达式定义的模式从左到右应用于字符串,并且一旦在匹配项中使用了源字符,就无法重用它。

    例如,正则表达式“ 121”将匹配“ 31212142121”的次数是“ _121____121”的两倍。

    正则表达式常见的匹配符号

    正则表达式 描述
    匹配任何单个符号,包括所有内容 (“ ..”,“ a%”)– true(“ ..”,“。a”)– true

    (“ ..”,“ a”)–否

    ^ xxx 在行首匹配xxx正则表达式 (“ ^ ac”,“ abcd”)– true(“ ^ a”,“ a”)– true

    (“ ^ a”,“ ac”)–否

    xxx $ 在行尾匹配正则表达式xxx (“ .cd $”,“ abcd”)–真(“ a $”,“ a”)–真

    (“ a $”,“ aca”)–否

    [abc] 可以匹配字母a,b或c。 []被称为字符类。 (“ ^ [abc] d。”,“ ad9”)–正确(“ [ab] .d $”,“坏”)–正确

    (“ [ab] x”,“ cx”)–否

    [abc] [12] 可以匹配a,b或c,然后匹配1或2 (“ [ab] [12]。”,“ a2#”)– true(“ [ab] .. [12]”,“ acd2”)– true

    (“ [ab] [12]”,“ c2”)–否

    [^ abc] 当^是[]中的第一个字符时,它会否定模式,匹配除a,b或c之外的任何其他字符 (“ [[^ ab] [^ 12]。”,“ c3#”)–真(“ [[^ ab] .. [^ 12]”,“ xcd3”)–真

    (“ [^ ab] [^ 12]”,“ c2”)–否

    [a-e1-8] 匹配范围从a到e或1到8 (“ [a-e1-3]”,“ d#”)–真(“ [a-e1-3]”,“ 2”)-真

    (“ [a-e1-3]”,“ f2”)–否

    xx | yy 匹配正则表达式xx或yy (“ x。| y”,“ xa”)– true(“ x。| y”,“ y”)

    (“ x。| y”,“ yz”)–否


    Java正则表达式元字符

    正则表达式 描述
    \ d 任何数字,少于[0-9]
    \ D 任何非数字,是[^ 0-9]的缩写
    \ s 任何空格字符,是[\ t \ n \ x0B \ f \ r]的缩写
    \ S 任何非空白字符,是[^ \ s]的缩写
    \ w 任何文字字符,是[a-zA-Z_0-9]的缩写
    \ W 任何非单词字符,是[^ \ w]的缩写
    \ b 单词边界
    \ B 非单词边界

    在正则表达式中有两种方法可以将元字符用作普通字符。

    1. 在元字符之前加一个反斜杠(\)。
    2. 保持元字符在\ Q(以引号开头)和\ E(以引号结尾)之内。


    正则表达式量词

    量词指定要匹配的字符的出现次数。

    正则表达式 描述
    X? x发生一次或根本不发生
    X* X出现零次或多次
    X + X发生一次或多次
    X {n} X正好发生n次
    X {n,} X出现n次或更多次
    X {n,m} X发生至少n次但不超过m次

    量词也可以与字符类和捕获组一起使用。

    例如,[abc] +表示a,b或c一次或多次。

    (abc)+表示“ abc”组再出现一次。 我们现在将讨论捕获组

    正则表达式捕获组

    捕获组用于将多个字符视为一个单元。 您可以使用()创建一个组。 输入String与捕获组匹配的部分被保存到内存中,可以使用Backreference进行调用。

    您可以使用matcher.groupCount方法找出正则表达式模式中的捕获组数。 例如在((a)(bc))中包含3个捕获组; ((a)(bc)),(a)和(bc)。

    您可以在正则表达式中使用反引号 (\),然后再调用要调用的组数。

    捕获组和反向引用可能会造成混淆,因此让我们通过一个示例来理解它。

    System.out.println(Pattern.matches('(\\w\\d)\\1', 'a2a2')); //true
    		System.out.println(Pattern.matches('(\\w\\d)\\1', 'a2b2')); //false
    		System.out.println(Pattern.matches('(AB)(B\\d)\\2\\1', 'ABB2B2AB')); //true
    		System.out.println(Pattern.matches('(AB)(B\\d)\\2\\1', 'ABB2B3AB')); //false

    在第一个示例中,在运行时,第一个捕获组是(\ w \ d),当与输入字符串“ a2a2”匹配并保存在内存中时,其计算结果为“ a2”。 因此\ 1指的是“ a2”,因此它返回true。 由于相同的原因,第二条语句打印为false。
    尝试自己了解语句3和4的这种情况。

    现在,我们将研究一些重要的Pattern和Matcher类方法。

    我们可以创建带有标志的Pattern对象。 例如模式。 CASE_INSENSITIVE启用不区分大小写的匹配。

    模式类还提供了类似于String类split()方法的split(String)
    模式类toString()方法返回从中编译此模式的正则表达式String。

    Matcher类具有start()end()索引方法,这些方法精确显示在输入字符串中找到匹配项的位置。

    Matcher类还提供String操作方法replaceAll(String替换)replaceFirst(String替换)

    现在,我们将通过一个简单的java类看到这些常用功能:

    package com.journaldev.util;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexExamples {
    
    	public static void main(String[] args) {
    		// using pattern with flags
    		Pattern pattern = Pattern.compile('ab', Pattern.CASE_INSENSITIVE);
    		Matcher matcher = pattern.matcher('ABcabdAb');
    		// using Matcher find(), group(), start() and end() methods
    		while (matcher.find()) {
    			System.out.println('Found the text \'' + matcher.group()
    					+ '\' starting at ' + matcher.start()
    					+ ' index and ending at index ' + matcher.end());
    		}
    
    		// using Pattern split() method
    		pattern = Pattern.compile('\\W');
    		String[] words = pattern.split('one@two#three:four$five');
    		for (String s : words) {
    			System.out.println('Split using Pattern.split(): ' + s);
    		}
    
    		// using Matcher.replaceFirst() and replaceAll() methods
    		pattern = Pattern.compile('1*2');
    		matcher = pattern.matcher('11234512678');
    		System.out.println('Using replaceAll: ' + matcher.replaceAll('_'));
    		System.out.println('Using replaceFirst: ' + matcher.replaceFirst('_'));
    	}
    
    }

    上面程序的输出是:

    Found the text 'AB' starting at 0 index and ending at index 2
    Found the text 'ab' starting at 3 index and ending at index 5
    Found the text 'Ab' starting at 6 index and ending at index 8
    Split using Pattern.split(): one
    Split using Pattern.split(): two
    Split using Pattern.split(): three
    Split using Pattern.split(): four
    Split using Pattern.split(): five
    Using replaceAll: _345_678
    Using replaceFirst: _34512678

    正则表达式是Java面试问题的领域之一,在接下来的几篇文章中,我将提供一些实际示例。

    参考: 开发人员食谱博客上的JCG合作伙伴 Pankaj Kumar的Java正则表达式示例教程

    翻译自: https://www.javacodegeeks.com/2012/11/java-regular-expression-tutorial-with-examples.html

    展开全文
  • java正则表达式查找文件 首先: 驱使我去做这件事的原因,纯属是因为在大学收作业的时候总是会有一部分人不按时上交文件,反正我是没有耐心去寻,索性写段程序一劳永逸!! 需要: 一份班级名单 文件路径 ...

    java正则表达式查找文件


    首先:
    驱使我去做这件事的原因,纯属是因为在大学收作业的时候总是会有一部分人不按时上交文件,反正我是没有耐心去寻,索性写段程序一劳永逸!!

    需要:

    • 一份班级名单
    • 文件路径
    
    
    	 String []model= {
    				"罗伟洲","陈巧","吴红玉","杨芸逍","向纤慧","万君","黄金","孙小平","张露露","刘承鑫","刘帆","龙云锋",
    				"黄婕","冯浪","李富林","杨艾","黄丹","杨璐华","谭钦","李帅杰","潘豪","刘森彪","陈翔宇","胡峰","吴刚",
    				"叶智豪","李光健","李俊达","刘俊濠","陈康林","张林","彭渝惠","毛思雅","邹家江","穆小丽","文于键","蔡庆",
    				"毛睿","孙彩云","宋书杰","谭垚","刘其亮","李经纬","蒋贵成","郑光怀","成斌","卢柯","徐江鸿"};
    				//班级名单
    		File file=new File("D:\\软件307大作业")
    		//要扫描的文件夹路径;
    		File name[]=file.listFiles();
    		//将该目录下的所有子文件存到数组里
    		List<String> list=new ArrayList<String>();
    		for (int i = 0; i < name.length; i++) {
    			File names=name[i];
    			if (names.isDirectory()) {//判断是否为文件夹
    				list.add( names.getName());
    			}
    		}
    int size=list.size();
    			String n[]=new String[size];
    			for (int j = 0; j < list.size(); j++) {
    				n[j]=(String)list.get(j);
    			}
    			//遍历文件名存到数组里
    			for (int i = 0; i < n.length; i++) {
    				for (int j = 0; j < model.length; j++) {
    					
    					if (Pattern.matches(".*"+model[j]+".*", n[i])) {
    					//正则表达式:判断文件夹的名称是否包含名单上的姓名
    						model[j]=" ";
    						//交了文件的同学清除姓名,留下没有交的同学姓名
    					}
    				}
    			}
    			for (int i = 0; i < model.length; i++) {
    				System.out.print(model[i]);
    			}
    			//打印文件夹里没有匹配的同学姓名
    

    注意:
    1.其中Pattern.matches(a,b)的用法:
    就是判断a,b两个字符串是否相匹配,如果匹配,返回 true
    2.关于字符串与变量的拼接:
    在一个字符串里面插入一个变量,如果这样写:

    String a="world";
    System.out.print("hello a") //hello a
    

    很显然会取不到变量的值,这时候我们只需要将变量名放在双引号里面用+号连接即可("+变量名+"),例如:

    String a="world";
    System.out.print("hello "+a+" ");// hello world
    

    展开全文
  • Java 正则表达式的用法和实例

    万次阅读 多人点赞 2019-06-11 11:17:00
    表达式”t.o“ 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。 2、中括号”[]“:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。 表达式:t[abcd]n 只可以匹配:tan,tbn,tcn,...

    一、概述:

    • 用来描述或者匹配一系列符合某个语句规则的字符串

    二、单个符号

    1、英文句点.符号:匹配单个任意字符。

    • 表达式t.o 可以匹配:tnot#oteo等等。不可以匹配:tnnotoTnot正o等。

    2、中括号[]:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。

    • 表达式:t[abcd]n 只可以匹配:tantbntcntdn。不可以匹配:thntabntn等。

    3、| 符号。相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。

    • 表达式:t(a|b|c|dd)n 只可以匹配:tantbntcntddn。不可以匹配taantntabcn等。

    4、表示匹配次数的符号
    在这里插入图片描述

    • 表达式:[0—9]{ 3 } \— [0-9]{ 2 } \— [0-9]{ 3 } 的匹配格式为:999—99—999
      因为符号在正则表达式中有特殊的含义,它表示一个范围,所以在前面加转义字符\

    5、^符号:表示否,如果用在方括号内,^表示不想匹配的字符。

    • 表达式:[^x] 第一个字符不能是x

    6、\S符号:非空字符
    7、\s符号:空字符,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。
    8、\r符号:空格符,与\n\tab相同

    三、快捷符号

    1、\d表示[0—9]
    2、\D表示[^0—9]
    3、\w表示[0—9A—Z_a—z]
    4、\W表示[^0—9A—Z_a—z]
    5、\s表示[\t\n\r\f]
    6、\S表示[^\t\n\r\f]

    四、常用的正则表达式

    1、Java:(([a-z]|_)(\\w*)){6,20}匹配以字母或下划线开头,字母数字下划线结尾的字符串
    2、JavaScript:/^(\-?)(\d+)$/匹配数字
    3、JavaScript:/^\w+$/匹配字母数字下划线。

    五、Java 中正则表达式的应用

    1、判断功能

    • public boolean matches(String regex)

    案例:判断录入的手机号是否为13或者18开头

    package Lemon;
    
    import java.util.Scanner;
    
    public class RegexDm {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入手机好:");
            String s = sc.nextLine();
    
            String regex = "1[38]\\d{9}";//定义手机好规则
            boolean flag = s.matches(regex);//判断功能
            System.out.println("flag:"+flag);
        }
    }
    

    2、分割功能

    • public String[] split(String regex)

    案例:

    package Lemon;
    
    import java.util.Scanner;
    
    public class RegexDm {
        public static void main(String[] args){
            String age = "18-24";//定义年龄范围
            String regex = "-";
            String[] strArr = age.split(regex);//分割成字符串数组
    
            int startAge = Integer.parseInt(strArr[0]);
            int endAge = Integer.parseInt(strArr[1]);
    
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的年龄:");
            int a = sc.nextInt();
            if (a >= startAge && a <= endAge){
                System.out.println("你就是我想找的");
            }else{
                System.out.println("滚");
            }
        }
    }
    

    3、替换功能

    • public String replaceAll(String regex,String replacement)

    案例:

    package Lemon;
    
    public class RegexDm {
        public static void main(String[] args){
            String s = "12342jasfkgnas234";
            //把字符串里面的数字替换成*
            String regex = "\\d";
            String ss = "*";
            String result = s.replaceAll(regex,ss);
            System.out.println(result);
        }
    }
    

    六、常用正则表达式

    • ^\d+$ :非负整数(正整数 + 0)

    • ^[0-9]*[1-9][0-9]*$ :正整数

    • ^((-\d+)|(0+))$ :非正整数(负整数 + 0)

    • ^-[0-9]*[1-9][0-9]*$ :负整数

    • ^-?\d+$ :整数

    • ^\d+(\.\d+)?$ :非负浮点数(正浮点数 + 0)

    • ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ :正浮点数

    • ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ :非正浮点数(负浮点数 + 0)

    • ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ :负浮点数

    • ^(-?\d+)(\.\d+)?$ :浮点数

    • ^[A-Za-z]+$ :由26个英文字母组成的字符串

    • ^[A-Z]+$ :由26个英文字母的大写组成的字符串

    • ^[a-z]+$ :由26个英文字母的小写组成的字符串

    • ^[A-Za-z0-9]+$ :由数字和26个英文字母组成的字符串

    • ^\w+$ :由数字、26个英文字母或者下划线组成的字符串

    • ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ :email地址

    • ^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ :url

    • /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ :年-月-日

    • /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ :月/日/年

    • ^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$ :Emil

    • /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ :电话号码

    • ^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$ :IP地址

    • 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

    • 匹配双字节字符(包括汉字在内):[^\x00-\xff]

    • 匹配空行的正则表达式:\n[\s| ]*\r

    • 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

    • 匹配首尾空格的正则表达式:(^\s*)|(\s*$)

    • 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    • 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$

    • 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

    • 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?

    • 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

    元字符及其在正则表达式上下文中的行为:

    • \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
    • ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 \n\r之后的位置。
    • $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 \n\r之前的位置。
    • * 匹配前面的子表达式零次或多次。
    • + 匹配前面的子表达式一次或多次。+ 等价于 {1,}
    • ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}
    • {n} n 是一个非负整数,匹配确定的n 次。
    • {n,} n 是一个非负整数,至少匹配n 次。
    • {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
    • ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
    • . 匹配除 \n之外的任何单个字符。要匹配包括 \n 在内的任何字符,请使用象 [.\n]的模式。
    • (pattern) 匹配pattern 并获取这一匹配。
    • (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
    • (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
    • (?!pattern) 负向预查,与(?=pattern)作用相反
    • x|y 匹配 xy
    • [xyz] 字符集合。
    • [^xyz] 负值字符集合。
    • [a-z] 字符范围,匹配指定范围内的任意字符。
    • [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
    • \b 匹配一个单词边界,也就是指单词和空格间的位置。
    • \B 匹配非单词边界。
    • \cx 匹配由x指明的控制字符。
    • \d 匹配一个数字字符。等价于 [0-9]
    • \D 匹配一个非数字字符。等价于 [^0-9]
    • \f 匹配一个换页符。等价于 \x0c\cL
    • \n 匹配一个换行符。等价于 \x0a\cJ
    • \r 匹配一个回车符。等价于 \x0d\cM
    • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
    • \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
    • \t 匹配一个制表符。等价于 \x09\cI
    • \v 匹配一个垂直制表符。等价于 \x0b\cK
    • \w 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
    • \W 匹配任何非单词字符。等价于 [^A-Za-z0-9_]
    • \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
    • \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
    • \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值
    • \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm
    • \nml 如果 n 为八进制数字 (0-3),且 ml 均为八进制数字 (0-7),则匹配八进制转义值 nml
    • \un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。
    • 匹配中文字符的正则表达式: [u4e00-u9fa5]
    • 匹配双字节字符(包括汉字在内):[^x00-xff]
    • 匹配空行的正则表达式:n[s| ]*r
    • 匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
    • 匹配首尾空格的正则表达式:(^s*)|(s*$)
    • 匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
    • 匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

    利用正则表达式限制网页表单里的文本框输入内容:

    • 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
    • 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
    • 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
    • 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

    整理:

    • 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

    • 匹配双字节字符(包括汉字在内):[^\x00-\xff]

    • 匹配空行的正则表达式:\n[\s| ]*\r

    • 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

    • 匹配首尾空格的正则表达式:(^\s*)|(\s*$)

    • 匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

    • 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    • 匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

    • sql语句:^(select|drop|delete|create|update|insert).*$

    • 非负整数:^\d+$

    • 正整数:^[0-9]*[1-9][0-9]*$

    • 非正整数:^((-\d+)|(0+))$

    • 负整数:^-[0-9]*[1-9][0-9]*$

    • 整数:^-?\d+$

    • 非负浮点数:^\d+(\.\d+)?$

    • 正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

    • 非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$

    • 负浮点数:^(-((正浮点数正则式)))$

    • 英文字符串:^[A-Za-z]+$

    • 英文大写串:^[A-Z]+$

    • 英文小写串:^[a-z]+$

    • 英文字符数字串:^[A-Za-z0-9]+$

    • 英数字加下划线串:^\w+$

    • E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

    • URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 或者:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~@[\]\':+!]*([^<>\"\"])*$

    • 邮政编码:^[1-9]\d{5}$

    • 中文:^[\u0391-\uFFE5]+$

    • 电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

    • 手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

    • 双字节字符(包括汉字在内):^\x00-\xff

    • 匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)

    • 匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>

    • 匹配空行:\n[\s| ]*\r

    • 提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

    • 提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    • 提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

    • 提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

    • 提取信息中的中国手机号码:(86)*0*13\d{9}

    • 提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}

    • 提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}

    • 提取信息中的中国邮政编码:[1-9]{1}(\d+){5}

    • 提取信息中的浮点数(即小数):(-?\d*)\.?\d+

    • 提取信息中的任何数字 :(-?\d*)(\.\d+)?

    • IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

    • 电话区号:/^0\d{2,3}$/

    • 腾讯QQ号:^[1-9]*[1-9][0-9]*$

    • 帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

    • 中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

    七、实例

    1、效验QQ号(要求:5-15位数字,0不能开头)

    package Lemon;
    
    import java.util.Scanner;
    
    public class RegexDm {
        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));
        }
    
        private static boolean checkQQ(String qq) {
            return qq.matches("[1-9]{1}\\d{4,14}");
        }
    }
    
    展开全文
  • java 验证手机号码 身份证 email url 以及其他常用的正则表达式的验证方法。
  • 正则表达式 查找数字 数字相关的常用语法: \d 数字字符匹配。等效于 [0-9]。 \D 非数字字符匹配。等效于 [^0-9]。 [xyz] 字符集。匹配包含的任一字符。例如,"[abc]“匹配"plain"中的"a”。 [^xyz] ...

    正则表达式 查找数字

    数字相关的常用语法:

    \d数字字符匹配。等效于 [0-9]。
    \D非数字字符匹配。等效于 [^0-9]。
    [xyz]字符集。匹配包含的任一字符。例如,"[abc]“匹配"plain"中的"a”。
    [^xyz]反向字符集。匹配未包含的任何字符。例如,"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”。

    find 和 matches 的区别

    find 是部分匹配,适合判断是否含有某些内容,比如字符中是否含有数字

    matches 是全匹配,适合判断是否为数字或是字母

    1,判断字符中是否有数字

    表达式可以是 \d 或是 [0-9] 可能有多个加*

     public static void main(String[] args) {
            String str2 = "1aa564sdfp5324";
            System.out.println("======= "+str2+" =========");
            hasDigit(str2);
            str2 = "234564";
            System.out.println("======= "+str2+" =========");
            hasDigit(str2);
        }
    
     public static boolean hasDigit(String content) {
            String regExp = "\\d+";
            regExp = "[0-9]*";
            Pattern pattern=Pattern.compile(regExp);
            Matcher m = pattern.matcher(content);
            System.out.println(" matches nums: " +m.matches());
            System.out.println(" find nums: " +m.find());
            return m.find();
        }
        
    

    结果:

    ======= 1aa564sdfp5324 =========
     matches nums: false
     find nums: true
    ======= 234564 =========
     matches nums: true
     find nums: true
    

    2,提取字符串中的数字

    表达式: [^0-9] 需要用到反向字符集,去掉非数字的。

    public static void main(String[] args) {
            String str = "curStaff[25].staffName12";
            getContainsNum(str);
        }
        
        private static String getContainsNum(String str){
            String regExp="[^0-9]"; // 反向字符集。匹配未包含的数字,替换着里面的数字
            Pattern pattern = Pattern.compile(regExp);
            Matcher matcher = pattern.matcher(str);
            System.out.println("find "+matcher.find());
            String nums = matcher.replaceAll("").trim();
            System.out.println("nums "+nums);
            return nums;
        }
    

    结果:

    find true
    nums 2512
    

    这个例子中会有个问题,数字是获取了,但是糅合在一起了,一般会需要分开。

    3,分开提取的数字

    替换的时候使用特殊字符进行替换,然后再进行分割,进行大小判断

    public static void main(String[] args) {
            String str = "curStaff[25].staff454Name12";
            getSplitNums(str);
        }
    
        private static String getSplitNums(String str){
            String regExp="[^0-9]"; // 反向字符集。匹配未包含的数字,替换着里面的数字
            Pattern pattern = Pattern.compile(regExp);
            Matcher matcher = pattern.matcher(str);
            List<String> strList = new ArrayList<>();
            // 用一个字符进行替换,逗号,空格或是特殊字符
            String nums = matcher.replaceAll(",").trim();
            //以逗号为分割符在讲数字存入一个字符串数组中
            String[] strArr = nums.split(",");
            System.out.println("nums "+nums);
            for (String single: strArr) {
                if(single.length() > 0){
                    strList.add(single);
                }
            }
            System.out.println("result: "+strList.toString());
            return nums;
        }
    

    总结:

    ​ 使用正则表达式的时候,主要是对“正则表达式语法”要熟悉,使用的话,没有想法的话就网上查查,理解后,再实践操作一遍。

    另外一种获取数字的方式 获取双引号里面的数字

    展开全文
  • java正则表达式解析

    万次阅读 多人点赞 2018-11-08 20:59:07
    一、知道java正则表达式是干什么的? 百度百科定义: 其实这已经说得很明确了,正则表达式其实就是一个字符串,这个字符串是按照一定的规则进行组合得来的,而这个规则当然是创始者定义,用这些规则我们能做什么...
  • Java正则表达式之分组和替换

    万次阅读 多人点赞 2019-08-24 08:36:17
    正则表达式的分组不是很好懂,但却是很强大的文本处理工具。 1 分组替换 什么是分组,直接引用 Java Api 中 Pattern 中的描述: Capturing groups are numbered by counting their opening parentheses from ...
  • java通过正则表达式匹配获取MAC(支持windows和Linux)
  • Java正则表达式查找字符串

    千次阅读 2020-06-09 23:54:38
    想用java正则表达式查找字符串,发现要调好几个方法,比较python麻烦好多,于是封装了个方法,第一个参数是正则表达式,第二个参数是被查找的文本 public static List<String> regEx(String patten,String ...
  • 网上了下,果然有个Xeger,可以用。我只是做了回搬运工。下载后解压,有两个jar。 public static void main(String[] args) { String regex = "[0-9a-z]{32}"; Xeger generator = new Xeger(regex); String ...
  • java正则表达式用法示例 当我开始使用Java时,正则表达式对我来说是一场噩梦。 本教程旨在帮助您掌握Java正则表达式,并让我定期返回以刷新我的正则表达式学习。 什么是正则表达式? 正则表达式定义字符串的...
  • Java正则表达式

    2021-07-10 20:21:28
    Java正则表达式
  • /** * <p>Title: 正则表达式的研究</p> * <p>Description: * 最近在工作中常常用到一些正则表达式的使用问题,到网上去介绍大多是一鳞半爪。求人不如 * 求已。一狠心,自己看!这两天利用我们项目两期之间的...
  • java正则表达式基本含义及用法 一、前言 正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到。 二、基础语法 字符 构造正则表达式的...
  • 正则表达式已经超出了某种语言或某个系统的局限,成为被人们广为使用的工具,我们完全可以用它来解决实际开发中碰到的一些实际的问题。 一、正则表达式基础知识 1.1 句点符号 假设你在玩英文拼字游戏,想要出三个...
  • Java正则表达式详解

    千次阅读 2018-06-07 09:27:03
    在操作String类对象时,会经常遇到对字符串进行验证的功能,而按照我们之前学习的String类,我们使用String类中的诸多函数是可以完成对字符串校验功能的,但是代码相对来说比较麻烦,所以在Java中引入正则表达式的...
  • 为什么“java正则表达式中匹配一个\要用\\\\欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...
  • java 利用正则表达式从字符串中提取省、市、区、镇、乡等区域名称(包含少数民族地区),支持地址中无省,无市,无县情况。
  • ", "pubDate": "2007-11-02T00:00:00", "upDate": "2020-09-03T01:13:18" } 匹配其中的链接:http://mp3.9ku.com/hot/2007/11-01/91161.mp3 二、解决方法 正则表达式:(?)(.*)(?="}) 解释: ?表示找到以mp3:"开头的...
  • 正则表达式对字符的常见操作 :字符串的匹配、切割、替换、获取 1、字符串的匹配 matches() str.matches(regex) 返回 true false 2、切割 split() String [ ] ss =s.split(regex) 返回一个字符串数组 3、替换 ...
  • 先确定我们要解决的问题——从一段Html文本中出特定id的标签的innerHTML,需要的朋友可以参考下
  • import org.apache....import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HrefParer { private static final String HREF
  • 使用java正则表达式,在文件中查找特定模式的字符串 package proj; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java....
  • 简介 在我们日常开发中,常常会对一些固定信息需要识别,如:手机号、身份证等。...那么就需要过滤一些基本的垃圾信息,提示用户输入错误,需要重新输入。 代码工具类 public class InfoFilterUtil { ...
  • 这篇文章主要示范一下java引用正则表达式的基本方法 正则表达式的主要条件只有两个:其一是表达式本身,其二就是要查找的数据源。 主要分为四步: 1.写出表达式 2.把表达式编译成正则格式 3.创建一个匹配对象进行...
  • Java正则表达式&集合

    千次阅读 2017-11-06 14:51:44
    正则表达式 正则表达式常用的语法: A:字符 x 字符 x :任意的字符 \\ 反斜线字符 在代码中书写正则表达式:\------&gt;用两个\\代表一个反斜线 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u...
  • 使用正则,匹配字符串,注意转义 正则实例 //数量 String number = "2台";... //正则表达式,获取全部数字,连续的数字为一组 Pattern pattern = Pattern.compile("\\d*"); //匹配所有的数字 Pattern patte...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,716
精华内容 19,486
关键字:

java正则表达式找中文

java 订阅