Java正则表达式相关知识点有哪些

技术Java正则表达式相关知识点有哪些这篇文章主要介绍“Java正则表达式相关知识点有哪些”,在日常操作中,相信很多人在Java正则表达式相关知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

本文主要介绍“与Java正则表达式相关的知识点有哪些”。在日常操作中,相信很多人对于Java正则表达式相关的知识点有哪些都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“Java正则表达式相关知识点有哪些”的疑惑!接下来,请和边肖一起学习!

\反斜杠

\ t服务器(' u0009 ')

\n换行(' u000A ')

\r输入(' \ u000D ')

\d数字相当于[0-9]

\D相当于[0-9]的非数字

\s空白符号[\t\n\x0B\f\r]

\S非空白符号[\ t \ n \ x0b \ f \ r]

\w单个字符[a-zA-Z_0-9]

\W非独立字符[a-za-z _ 0-9]

\f页面馈送字符

\eEscape

一个单词的边界

\B非字边界。

\G结束上一场比赛的^为限制开头

Java条件仅限于以Java开头的字符。

$是极限的终点。

Java$条件仅限于以Java结尾的字符。限制任意字符

Java 语言(一种计算机语言,尤用于创建网站).条件仅限于除换行符之外的java后面任意两个字符的加入特定限制条件[]

[a-z]条件限于小写字母atoz范围内的一个字符。

[A-Z]条件限于大写字母AtoZ范围内的一个字符。

[a-zA-Z]条件限制为小写字母atoz或大写字母AtoZ范围内的一个字符。

[0-9]条件在0到9的小写中被限制为一个字符。

[0-9a-z]条件限于小写0到9或atoz范围内的一个字符。

[0-9[a-z]]条件仅限于小写0到9或atoz范围内一个字符(交集)的[]中加入^后加再次限制条件[^]

[a-z]条件限于非小写字母范围内的一个字符。

[a-z]条件在非大写的AtoZ范围内限于一个字符。

[a-za-z]条件限于非小写atoz或大写AtoZ范围内的一个字符。

[

^0-9]     条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)

在限制条件为特定字符出现0次以上时,可以使用*

J*     0个以上J
.*     0个以上任意字符
J.*D     J与D之间0个以上任意字符

在限制条件为特定字符出现1次以上时,可以使用+

J+     1个以上J
.+     1个以上任意字符
J.+D     J与D之间1个以上任意字符

在限制条件为特定字符出现有0或1次以上时,可以使用?

JA?     J或者JA出现

限制为连续出现指定次数字符{a}

J{2}     JJ
J{3}     JJJ

文字a个以上,并且{a,}

J{3,}     JJJ,JJJJ,JJJJJ,???(3次以上J并存)

文字个以上,b个以下{a,b}

J{3,5}     JJJ或JJJJ或JJJJJ

两者取一|

J|A     J或A
Java|Hello     Java或Hello

()中规定一个组合类型

比如,我查询<a href=\"index.html\">index</a>中<a href></a>间的数据,可写作<a.*href=\".*\">(.+?)</a>

在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:

Pattern Pattern.compile(String regex, int flag)

flag的取值范围如下:

Pattern.CANON_EQ :当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规范相等性(canonical equivalence)"。

Pattern.CASE_INSENSITIVE(?i): 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹配,只要将UNICODE_CASE与这个标志合起来就行了。

Pattern.COMMENTS(?x):在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。

Pattern.DOTALL(?s) :在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符。

Pattern.MULTILINE(?m):在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。

Pattern.UNICODE_CASE(?u):在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。

Pattern.UNIX_LINES(?d):在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。

抛开空泛的概念,下面写出几个简单的Java正则用例:

◆比如,在字符串包含验证时

//查找以Java开头,任意结尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人");
boolean b= matcher.matches();
//当条件满足时,将返回true,否则返回false
System.out.println(b);

◆以多条件分割字符串时

Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World  Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}

◆文字替换(首次出现字符)

Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));

◆文字替换(全部)

Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));

◆文字替换(置换字符)

Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());

◆验证是否为邮箱地址

String str="ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());

◆去除html标记

attern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
String string = matcher.replaceAll("");
System.out.println(string);

◆查找html中对应条件字符串

Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
if(matcher.find())
System.out.println(matcher.group(1));
}

◆截取http://地址

//截取url
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){              
buffer.append(matcher.group());        
buffer.append("\r\n");              
System.out.println(buffer.toString());
}

◆替换指定{}中文字

String str = "Java目前的发展史是由{0}年-{1}年";
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[] object) {
String temp=sourceString;    
for(int i=0;i<object.length;i++){
String[] result=(String[])object[i];
Pattern    pattern = Pattern.compile(result[0]);
Matcher matcher = pattern.matcher(temp);
temp=matcher.replaceAll(result[1]);
}
return temp;
}

◆以正则条件查询指定目录下文件

 //用于缓存文件列表
        private ArrayList files = new ArrayList();
        //用于承载文件路径
        private String _path;
        //用于承载未合并的正则公式
        private String _regexp;
        
        class MyFileFilter implements FileFilter {
              /**
               * 匹配文件名称
               */
              public boolean accept(File file) {
                try {
                  Pattern pattern = Pattern.compile(_regexp);
                  Matcher match = pattern.matcher(file.getName());                
                  return match.matches();
                } catch (Exception e) {
                  return true;
                }
              }
            }
        
        /**
         * 解析输入流
         * @param inputs
         */
        FilesAnalyze (String path,String regexp){
            getFileName(path,regexp);
        }
        
        /**
         * 分析文件名并加入files
         * @param input
         */
        private void getFileName(String path,String regexp) {
            //目录
              _path=path;
              _regexp=regexp;
              File directory = new File(_path);
              File[] filesFile = directory.listFiles(new MyFileFilter());
              if (filesFile == null) return;
              for (int j = 0; j < filesFile.length; j++) {
                files.add(filesFile[j]);
              }
              return;
            }
    
        /**
         * 显示输出信息
         * @param out
         */
        public void print (PrintStream out) {
            Iterator elements = files.iterator();
            while (elements.hasNext()) {
                File file=(File) elements.next();
                    out.println(file.getPath());    
            }
        }
        public static void output(String path,String regexp) {
            FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
            fileGroup1.print(System.out);
        }
    
        public static void main (String[] args) {
            output("C:\\","[A-z|.]*");
        }

到此,关于“Java正则表达式相关知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107925.html

(0)

相关推荐

  • SQL附加数据库失败问题的解决方法

    技术SQL附加数据库失败问题的解决方法这篇文章将为大家详细讲解有关SQL附加数据库失败问题的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为了偷个懒,利用这个数据

    攻略 2021年11月30日
  • jquery如何判断点击了几次

    技术jquery如何判断点击了几次本篇内容主要讲解“jquery如何判断点击了几次”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery如何判断点击了几次”吧!

    攻略 2021年11月19日
  • Python怎么实现两数相加

    技术Python怎么实现两数相加这篇文章主要讲解了“Python怎么实现两数相加”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现两数相加”吧!两数相加题

    攻略 2021年11月20日
  • Activiti中28张数据表的含义是什么

    技术Activiti中28张数据表的含义是什么这期内容当中小编将会给大家带来有关Activiti中28张数据表的含义是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Activiti

    攻略 2021年10月20日
  • mysql与sql的区别有哪些

    技术mysql与sql的区别有哪些这篇文章给大家分享的是有关mysql与sql的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 mysql与sql的区别是

    攻略 2021年12月2日
  • SQL Server日期函数CAST和CONVERT以及在业务中的使用是怎样的

    技术SQL Server日期函数CAST和CONVERT以及在业务中的使用是怎样的SQL Server日期函数CAST和CONVERT以及在业务中的使用是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编

    攻略 2021年12月1日