`
nigelzeng
  • 浏览: 605803 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在J2SE中使用正则表达式的一个细节

    博客分类:
  • Java
阅读更多

今天在做字符串处理的时候,

发现了在J2SE中使用正则表达式来匹配英文句号的一个小陷阱。

特此记录下来。

 

 

public static void main(String[] args) {
    String test = "aa\\abb.gg\\ad.txt";
    String regEx = ".+\\\\(.+)\\..+$";
    Pattern p = Pattern.compile(regEx);
    Matcher m = p.matcher(test);
    boolean rs = m.find();    // 用来验证时候有匹配项
    for (int i = 1; i <= m.groupCount(); i++) {
        System.out.println(m.group(i));
    }
}

 

关键的部分在这一句:

 

String regEx = ".+\\\\(.+)\\..+$";

 

在正则表达式中,我们都知道要匹配特殊字符需要用转义符 “ \ ”  来转移该特殊字符,

所以我相当然的以为跟其他语言一样,

 " \. " 可以匹配英文的句号 " . "

但是在J2SE中,却得到编译器报错的错误。

 

查阅相关资料,java中的dot符号(.)需要用“ \\. ”来转义。

因为Java编译器会把 "\." 当做是对它的字符串对象的转义。

 

原文如下:

It's actually very simple. You need to end up with the escape sequence \. for the regexp to the valid, but it doesn't work because the Java compiler sees it as an escape for its String objects, while a full-stop here does not require escaping.
The work-around is to write "\\.". This way, the backslash is escaped on the first round (remember that a backslash must be escaped anyway), and on the second round (when involving regex), it is the full-stop which is escaped...
 

 

 

========================全文完======================

0
1
分享到:
评论

相关推荐

    j2se基础面试

    3. Java中使用Pattern和Matcher类进行正则匹配。 十五、反射机制: 1. 反射允许程序在运行时动态获取类的信息并操作类的对象。 2. Class类:代表运行时的类信息,如获取类名、构造器、方法等。 3. Method类:表示类...

    GWT开发者手册_v2

    - **正则表达式**:Java 正则表达式的语法与 JavaScript 相似但也有区别,某些方法如 `replaceAll` 和 `split` 在转换后的 JavaScript 中可能表现不同。 - **序列化**:由于动态类装载和反射在编译后的 JavaScript ...

    Building Applications using J2EE 1.4.pdf

    - 第一个使用Java社区流程的版本。 - JSR-059 (Java Specification Request) —— Java的伞形规范请求。 2. **新编程特性**: - 日志记录APIs。 - 断言机制。 - XML处理 (JAXP)。 - 新的I/O APIs。 - 正则...

    JAVA 2应用编程实例

    8. **API使用**:学习并应用Java标准库中的各种类和方法,如日期时间处理、数学运算、正则表达式等。 9. **设计模式**:了解和应用常见的设计模式,如工厂模式、单例模式、观察者模式等。 通过上述知识点的学习和...

    Java自学知识点参考.doc

    正则表达式用于文本匹配和操作。 2. **数据库**: 掌握SQL语言,包括对Oracle或MySQL的操作,如单表查询、多表连接(内连接、外连接)、子查询。管理数据库对象如表、视图、索引、序列和约束。树状结构存储数据,...

    java学习流程介绍以及java核心思想

    正则表达式用于字符串匹配和处理,反射机制允许程序在运行时动态访问类的信息。 2. **数据库(如Oracle或MySQL)**:掌握SQL语言,包括DML(数据操作语言)和DDL(数据定义语言),如插入、更新、删除、创建表等。...

    java和java虚拟机发展史思维导图

    2000年,Java 2 Standard Edition (J2SE) 1.4发布,引入了显著的性能提升和新特性,如异常链、断言和正则表达式。更重要的是,这个版本引入了Java HotSpot技术,可以根据运行时性能动态优化代码,极大地提升了JVM的...

    南通的JAVA自学之路(加精).

    - 正则表达式、反射机制等也是高级Java开发者必备的技术。 - **数据库**:无论是Oracle还是MySQL,熟悉SQL语句、表的管理、数据库设计原则都是非常重要的。 - **JDBC**:掌握数据库操作的基本技能,包括连接池、...

    Java JDK6.0学习笔记

    - **字符串:** 学习`String`类的基本用法,理解字符串的不可变性,并学会使用正则表达式处理字符串。 #### 四、面向对象编程 **封装:** - **类与对象:** 学习如何定义类以及创建对象。 - **成员变量与方法:**...

    java知识点汇总学习路线与笔记

    - **正则表达式**:Java提供了Pattern和Matcher类来支持正则表达式的使用。 - **反射机制**:反射允许在运行时访问和修改类、字段和方法的信息。 #### 二、数据库 - **SQL语句**:SQL是用于访问和处理关系数据库的...

    Java发展史_&_Java9、10新特性

    JShell是一个交互式的Java shell工具,允许开发者在命令行中即时编写和测试代码片段,这对于快速原型设计和学习非常有用。 通过回顾Java的发展历程以及详细介绍Java 9的新特性,我们可以看出Java语言一直在不断...

    java笔试面试题(含有笔试题,核心技术,重点知识,struts,hibernate,spring,eclipse)

    2. **继承**:继承允许一个类(子类)继承另一个类(父类)的特性和行为。这有助于代码复用和减少冗余代码。继承还提供了层次化的分类结构,使得代码更加灵活和易于扩展。 3. **多态**:多态是指允许不同类的对象对...

Global site tag (gtag.js) - Google Analytics