精华内容
下载资源
问答
  • [Java 提供了功能强大的正则表达式API,在java.util.regex 包下。本教程介绍如何使用正则表达式API。]刚才有同事问,顺便发出来一下。以前读《精通正则表达式》的时候已经知道Java正则表达式支持\p{Inname}的...

    [Java 提供了功能强大的正则表达式API,在java.util.regex 包下。本教程介绍如何使用正则表达式API。]

    刚才有同事问,顺便发出来记一下。

    以前读《精通正则表达式》的时候已经知道Java的正则表达式支持\p{In

    name}的形式来指定匹配属于name的Unicode区块的字符。JDK的

    Pattern类的文档上也有相关例子,\p{InGreek},表示匹配一个属于名为“Greek”的Unicode区块的字符。

    那汉字怎么办?

    Unicode里中文、日文与韩文的汉字是放在同一个(一些)区块里的,主要是在“CJK Unified Ideographs”当中,[最近需要在部署实时爬虫检测系统时,需要动态显示页面内容,但也为了简单,于是想了个很奇怪的办法。想把一个长篇小说,《地缘政治大战略》中的所有内容赋值给字符串,但还有一些在“CJK Unified Ideographs Extension A”与“CJK Unified Ideographs Extension B”当中。

    以前我没用这个方式匹配过汉字,还在想这名字里面有空格怎么办,试了一下\p{InCJK Unified Ideographs}发觉果然可以……当然,这种办法是不区分匹配到的汉字到底是中文、日文还是韩文的。也不区分简繁体。同事还问怎么用正则表达式只匹配简体中文,这个我就没想出什么好办法。

    《精通正则表达式》里也提到.NET用的Unicode区块语法是\p{name}或者\p{Is

    name},相关文档在

    这里。

    放一demo代码:

    public class TestUnicodeBlock {

    public static void main(String[] args) {

    final String regex = "\\p{InCJK Unified Ideographs}";

    final String[] testChars = {

    "\u6211", // a Chinese character

    "\u300A", // a full-width punctuation

    "\u3042", // a Hiragana character

    "\uD55C" // a Hangul character

    };

    for (String s : testChars) {

    System.out.printf("matched %s: %b\n", s, s.matches(regex));

    }

    }

    }[统计指定内容的汉字个数:String str = 北京欢迎你 hello welcome!;int count=0;Pattern pattern = Pattern.compile([\u4e00-\u9fa5]);char c[] = str.toCharArray();for(

    展开全文
  • 正则表达式的具体写法网上有很多了,这里只记录在 Java怎么使用。java.util.regex.Matcher、java.util.regex.Pattern主要有:String.matches方法。只判断是否匹配可以用这个;Matcher.matches方法。全局匹配,并...

    正则表达式的具体写法网上有很多了,这里只记录在 Java 中怎么使用。

    java.util.regex.Matcher、java.util.regex.Pattern

    主要有:

    String.matches方法。只判断是否匹配可以用这个;

    Matcher.matches方法。全局匹配,并配合 Matcher.group 提取出某规则局部(正则表达式内用括号(...)(...)...分组,组下标 1,2,3...);

    Matcher.find方法。局部匹配,并用 Matcher.group 提取出该局部。

    一段示例代码:

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    public static void main(String[] args) {

    String str = " +214asv";

    String regex1 = "([ ]*)([+-]?\\d+)(\\D*.*)";

    // 1.

    System.out.println(str.matches(regex1));

    // 2.

    Pattern pattern1 = Pattern.compile(regex1);

    Matcher matcher1 = pattern1.matcher(str);

    if (matcher1.matches())

    System.out.println(matcher1.group(2));

    // 3.

    String regex2 = "[+-]?\\d+";

    Pattern pattern2 = Pattern.compile(regex2);

    Matcher matcher2 = pattern2.matcher(str);

    if (matcher2.find()){

    System.out.println(matcher2.group());

    }

    }

    展开全文
  • 最初我只是想记录下正则表达式用unicode的方式来匹配特殊字符,写着写着发现 v8 对 u 修饰符的不支持,又转而去研究怎么转换字符串到utf-16的格式,在研究怎么转换的过程中发现ES5的正则对 unicod...

    首先声明,本文所有的代码都是在 ES6 下面运行,ES5需要修改之后才能运行,但是本文没有涉及到太多的ES6新特性,而且由于v8对u修饰符不支持,最后的实现也基本是用ES5的知识写的代码。

    最初我只是想记录下正则表达式用unicode的方式来匹配特殊字符,写着写着发现 v8 对 u 修饰符的不支持,又转而去研究怎么转换字符串到utf-16的格式,在研究怎么转换的过程中发现ES5的正则对 unicode 编码单元 > 0x10000 的字符串不支持,再转而去实现了一遍对大于 0x10000 的字符串的转换,特此记录。

    之前有遇到过一个实用正则表达式匹配特殊字符的需求,例如一段文本 'ab*cd$你好我也好]\nseg$me*ntfault\nhello,world' ,用户可以选择用 * 或者 $ 来分割字符串。

    在javascript中, $ 和 * 都是预定义的特殊字符,不能直接写在正则表达式中,而需要转义,写成 /\$/ 或者 /\*/ 。

    我们需要根据用户的选择来写正则表达式,封装成一个函数就是:

    function reg(input) {

    return new RegExp(`\\${input}`)

    }

    这种写法初看上去很美好,将字符都转义之后遇到一些特殊的字符可以匹配,然而现实是残酷的:当用户输入的是 n 或者 t 这一类的字符的话,返回的正则表达式为 /\n/ 或者 /\t/ ,匹配的就是所有的制表符,这就违背了用户的初衷。

    通常有一种写法就是把所有需要转义的特殊字符都列出来,然后再逐一匹配,这种写法很耗费精力,而且可能因为没有统计到的特殊字符而出现漏匹配的情况。

    这个时候unicode就隆重登场了,在 JavaScript 中,我们也可以用unicode来表示一个字符,例如 'a' 可以写成'\u{61}', '你' 也可以写成 '\u{4f60}'。

    关于unicode的介绍大家可以看 Unicode与JavaScript详解

    ES5 中提供了 charCodeAt() 方法来返回指定索引处字符的 Unicode 数值,但是 Unicode 编码单元 > 0x10000 的除外, ES2015 中又增加了一个新的方法 codePointAt() 可以返回大于 0x10000 字符串的数值。返回的数值是十进制的,此时我们还需要通过 toString(16) 转成16进制。

    封装之后的函数如下

    function toUnicode(s) {

    return `\\u{${s.codePointAt().toString(16)}}`

    }

    toUnicode('$') -> '\u{24}'

    重新封装reg函数为

    function reg(input) {

    return new RegExp(`${toUnicode(input)}`, 'u')

    }

    其实写到这里,我希望是对的,但是很不幸,V8 不支持 RegExp 的 u 修饰符。V8支持的话,写到这里就应该结束了,没关系,这里只是提供一种用unicode的方式来转义特殊字符的思想。

    虽然v8不支持u修饰符,作为一个有追求的码农,当然不能止步于此,我们也可以使用其他方法继续把这个完善

    function toUnicode(s) {

    var a = `\\u${utf(s.charCodeAt(0).toString(16))}`

    if(s.charCodeAt(1))

    a = `${a}\\u${utf(s.charCodeAt(1).toString(16))}`

    return a

    }

    function utf(s) {

    return Array.from('00').concat(Array.from(s)).slice(-4).join('')

    }

    // 这里用var而没有用let声明,是因为这些代码直接复制到 chrome 的控制台下就可以看到执行结果

    // 测试一下

    // toUnicode('a') --> "\u0061"

    // toUnitcode('��') --> "\ud842\udfb7"

    function reg(input) {

    return new RegExp(`${toUnicode(input)}`)

    }

    // 再测试一下

    reg('$').test('$') --> true

    以上内容就是脚本之家小编给大家分享的正则表达式之 Unicode 匹配特殊字符

    展开全文
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    Java正则表达式入门 众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时 又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则...
  • 有一次在面试的过程中,被问到了正则表达式,这一下触碰到了我的知识盲区了,虽然我目前还没怎么用到过正则,不过还是先学习一番吧。 package day1105; import java.io.*; import java.util.regex.Matcher; ...

                                             正则表达式学习记录(1)

    有一次在面试的过程中,被问到了正则表达式,这一下触碰到了我的知识盲区了,虽然我目前还没怎么用到过正则,不过还是先学习一番吧。

    package day1105;
    
    import java.io.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexExp1 {
        /**
         * 匹配QQ号
         * 长度为5~10位,纯数字,第一位不能为0
         */
        public static boolean isQQ(String qq) {
            //[1-9] 第一位是1~9的数字
            //[0-9]{4,9} 第二位是0~9的数字,还需要4到9位,加上第1位,满足5~10位的要求
            String regex = "[1-9][0-9]{4,9}";
            return qq.matches(regex);
        }
    
        /**
         * 匹配手机号
         * 长度为11位,第一位只能是1,第二位可以是3,7,8,纯数字
         */
        public static boolean isPhone(String phone) {
            //1 第一位只能是1,由于只有一个数字,就不用写[]了
            //378   第二位只能是3或7或8
            //[0-9]{9} 第三位是0~9的数字,这样的数字需要9个,加上前面的2个,满足一共1位的要求
            String regex = "1[378][0-9]{9}";
            String regex2 = "1[378]\\d{9}";
            return phone.matches(regex2);
        }
    
        /**
         * 使用.来切割字符串
         */
        public static String[] removeDot(String str) {
            //注意转义,而非直接使用.,否则.会匹配任何字符
            String regex = "\\.";
            return str.split(regex);
        }
    
        /**
         * 去掉 你你你好好啊啊啊啊 中的叠词,形成 你好啊
         */
        public static String solveRepeat(String str) {
            //  ()来表示组
            //  (.)来表示任意字符,而\\1是对组(.)中的字符进行复用,合起来就是:两个相同的字符
            //  而叠词不止是两个字的叠词,也有三个字、四个字,因此用(.)\\1+表示叠词
            //  使用$1来复用组中第1组的值(即叠词的字符),将叠词替换成叠词中第一个字符
            String regex = "(.)\\1+";
            return str.replaceAll(regex, "$1");
    
        }
    
        /**
         * 获取一个文件内所有的邮箱号
         */
        public static void getEmail() {
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader(new File("g:\\test.html")));
                String regex = "[1-9]{5,10}@qq.com";
                Pattern p = Pattern.compile(regex);
                String line = "";
                while ((line = br.readLine()) != null) {
                    Matcher m = p.matcher(line);
                    while (m.find()) {
                        System.out.println(m.group());
                    }
                }
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public static void main(String[] args) {
            System.out.println(isQQ("767638734"));
            System.out.println(isPhone("18806210604"));
            String temp = "qw.we.rt.ty.yu";
            String[] strArr = removeDot(temp);
            for (String s : strArr) {
                System.out.println(s);
            }
            System.out.println(solveRepeat("你你你好好啊啊啊啊"));
            getEmail();
    
        }
    }
    

     

    展开全文
  • java正则表达式的学习

    2012-08-13 23:45:22
    正则表达式看似简单,要灵活使用却很难,至少我感觉是这样,(可能是做少了练习),你说要你写个邮件的正则表达式什么的,你都总是出错,别人怎么看你?唉,我当初公司评级考试的时候,就是写错了,导致严重后果啊。...
  • 上一篇:python高手养成10:python操作内存必备方法题序有一个东西,无论是什么语言,java,JavaScript,php等,都会遇到的一个东西,就是正则表达式,一个几乎要天天见到,并且无法离开的小东西。今天的文章,...
  • 正则表达式Essential

    2018-04-13 11:45:24
    这个就是大概让你直到正则表达式怎么用,我为了以后用做个记录,加个注释,美滋滋! RegexTestHarness.java import java.io.Console; import java.util.regex.Pattern; import java.ut...
  • 正则表达式笔记

    2017-12-14 00:03:59
    最近在复习java基础,看到了有关正则表达式的视频,所以写一遍文章,记录一下。 正则表达式,是java基础中的一部分。首先,有一个问题: 如果让你验证手机号码是否合法,你会怎么写? 1、打开浏览器,输入...
  • 只能说String工具类太强大,导致一直以来,几乎没怎么用到过正则表达式,现在突然要用到,参考正则表达式语法,摸索一上午才搞出来。记录分享一下,以免忘记 从一长串字符中,截取出邀请码,我想很多人都遇到过。 ...
  • 上一篇:python高手养成10:python操作内存必备方法题序有一个东西,无论是什么语言,java,JavaScript,php等,都会遇到的一个东西,就是正则表达式,一个几乎要天天见到,并且无法离开的小东西。今天的文章,...
  • 整理正则表达式

    2011-08-03 10:18:46
    引言:基本不怎么使用正则表达式,以至于每次使用时都忘记各符号的含义及用法,所以记录下,留个底,供快速参考用。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Tes
  • java语言编写,匹配URL中的访问资源,不匹配后面的参数,正则表达式怎么写? "GET /SchoolClubManage/jsp/common/applyjoinclub.html?name=../../../../../../../../../../etc/passwd%00.jpg HTTP/1.1" 200 5953 这...
  • 大过年的,加上室内温度高,烦躁,感觉学习效率有点低,今天就看了正则表达式。书上例4:假设姓名包括25个字母中的大部分,第一个字母大写。姓的模式可以描述为[A-Z][a-zA-Z][1,24]感觉很怪,一是[a-zA-Z]的用法在...
  • 展开全部在java中可以使用正则表达式来方便地统62616964757a686964616fe78988e69d8331333337396236计一个字符串中出现的标点符号的个数,思路是:1、先记录统计前的字符串长度2、使用正则表达式把需要统计的标点符号...
  • 我想将日志从Java应用程序发送到ElasticSearch,传统方法似乎是在运行应用程序的服务器上设置Logstash,并使用logstash解析日志文件(使用正则表达式…!)并将其加载到ElasticSearch中.是否有这样做的原因,而不是仅仅...
  • Java-PHP-C#

    2012-11-27 15:13:36
    此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。 在某个Linux网站上面有这样的话:"如果你问一下Linux爱好者最喜欢...
  • 编程语言: C, C++, VB, VBA, Java, Python 前端基础: ... 编程知识: ...数据结构与算法离散数学概率论 正则表达式 Web开发: Servlet, JSP, Hibernate, Struct2, Spring, CGI, MyBatis 数据库:...
  • 初学JAVA时,API太多,就没怎么记(估摸着也记不住),现在开始工作了,就把能遇到的API记录下来吧!一、字符串操作1.public String[] split(String regex, int limit)regex作为分隔符,limit作为检索分隔符的次数。...
  • 初学JAVA时,API太多,就没怎么记(估摸着也记不住),现在开始工作了,就把能遇到的API记录下来吧! 一、字符串操作 1.public String[] split(String regex, int limit) regex作为分隔符,limit作为检索分隔符的...
  • 笔试选择题记录

    2020-08-29 20:12:44
    8.26 京东 关闭linux防火墙 比较次数与初始排序无关的排序算法 tomcat日志输出 shell编程,获取。。长度 trim()去尾空格?...正则表达式 http各种状态码(服务器表示当前请求资源可以使用已有缓存) ...
  • Android java获取路径中文件名

    千次阅读 2019-04-12 18:05:13
    平常时,我们多少都会接触到...但是有的人也会说,用正则表达式也可以啊,的确可以,但是我想我自己找网上找的别人的一些,不错的方法,也值得我们学习。也是我自己实际项目中用到的,就记录一下,方便自己学习。 ...
  • 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • Sublime Text 行首行尾批量编辑

    千次阅读 2019-02-20 15:02:15
    做个需求,要求加一个字段,然后在另一个库中找出要修改的id,同步一下。懒得写java代码,就用纯sql实现。...3、在查找输入框输入正则匹配的模式(.*)部分即是正则表达式部分 然后按Ctrl + H 输入^,然...
  • Editplus 3[1].0

    2011-04-02 10:45:21
    这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • 正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 ...
  • qt quick学习

    千次阅读 2017-04-01 13:02:11
    属于declarative programming(声明式语言,声明式语言包括 regular如正则表达式,函数式语言如lisp,逻辑语言prolog等等。相对的,命令式语言 比如c,java),怎么理解呢?我也不太清楚,感觉声明式的就是在
  • 在学正则表达式,正反斜杠老是不住,这篇文章写太好了,故转载一下 程序中常说的正斜线和反斜线怎么记忆? 以前总是不怎么怎么是正,怎么是反,我个人是这样记忆的: 正斜杠 “/ ” 就是y=x的形状,斜率...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    9.5.1 创建正则表达式 338 9.5.2 使用正则表达式 341 9.6 程序国际化 345 9.6.1 Java国际化的思路 346 9.6.2 Java支持的语言和国家 346 9.6.3 完成程序国际化 347 9.6.4 使用MessageFormat处理包含占位符的...
  • EditPlus.rar +GCC

    2012-02-17 23:12:16
    这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

java正则表达式怎么记

java 订阅