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)

相关推荐

  • 使用Vue写一个登录页面

    技术使用Vue写一个登录页面 使用Vue写一个登录页面使用Vue写一个登录页面上一博客讲到构建了一个vue项目,现在在那个项目之上实现一个登录页面。
    1.构建项目的目录2.App.vuetemplate

    礼包 2021年10月27日
  • 山西有什么山,山东、山西的山指的是什么

    技术山西有什么山,山东、山西的山指的是什么山东因居太行山以东而得名山西有什么山,简称“鲁”,山西在太行山以西简称“晋”。这个说法对于三晋大地和齐鲁大地的广大群众而言,可谓人尽皆知。但看看地图就知道,山西和山东中间咋还夹着

    生活 2021年10月26日
  • ES6新特性常用的知识点有哪些

    技术ES6新特性常用的知识点有哪些这篇文章主要介绍了ES6新特性常用的知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.关键字Let 关键字

    攻略 2021年11月13日
  • 怎么写出优质干净的代码

    技术怎么写出优质干净的代码本篇内容主要讲解“怎么写出优质干净的代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么写出优质干净的代码”吧!写干净代码的好处先来了解编写干净代

    攻略 2021年11月2日
  • Bytom侧链Vapor源代码分析节点的解块过程是怎样的?

    技术Bytom侧链Vapor源码分析节点出块过程是怎样的Bytom侧链Vapor源码分析节点出块过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。小

    攻略 2021年12月18日
  • 电脑音响没声音怎么弄,台式电脑的音响没声音怎么办

    技术电脑音响没声音怎么弄,台式电脑的音响没声音怎么办情况一:右击桌面“我的电脑”--属性--硬件--设置管理器--声音视频和游戏控制器--这个项下面如果没有AC97或High Definition或其他长串的英文,或者存

    生活 2021年10月22日