一、正则表达式的转义字符\(特殊的两个反斜杠,你闹心不!)

java中正则表达式要有两个\\,才能达到转义。我写的这个命令是查找以http|ftp|https|file://开头,或是../..开头,或是../开头的所有字符,

正确是这样的((^(http|ftp|https|file)(://))|^(\\.\\./\\.\\./)|^(\\.\\./)).*

^(XXX)是表示以XXX开头的字符串。

正则表达式中表示数字是“\d”,实际在内存中就是两个字符\和d, 但在java中\就得写成\\,因此在写程序时就是\\d。

正则表达式一个\表示转义字符,与后面的字符共同组成一个字符集表示项,如\d表示数字。而要输出一个\,就需要两个,将\自身转义为普通字符。

而输出成“\\”,实际在内存中就是两个字符“\和\”,java中就要分别表示这两个\,每个都必须写成"\\",因此要写成"\\\\"。实际上先要将"\\\\"转换成一个字符串"\\"再交给正则表达式,正则表达式转义一次就刚好匹配一个"\"。

(java中的存在的转义序列值为“\b、\t、\n、\f、\r、\"、\'、\\”)

(正则表达式中的元字符:“(、[、{、\、^、-、$、|、}、]、)、?、+、*、+、.”)

(变态的不包含[^XXX])

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

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

我做了一个测试:[0-9a-z]和[0-9[a-z]]是一个样的,而[^0-9a-z]与[^0-9[a-z]]不同

先说一下[0-9a-z]和[0-9[a-z]]这两个正则表达式的效果是一样的,

String regEx = "[0-9[a-z]]";

//       String regEx = "[0-9a-z]";

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(str);

if (m.matches())

System.out.println("true");

else

System.out.println("incorrect");

测试字符效果都是一样的。

但是[^0-9a-z] 和[^0-9[a-z]]两个是不同的。

[^0-9a-z]表的是0到9或是a到z的字符都是不要的,而[^0-9[a-z]]测试结果显示,0到9的字符是incorrect,但a到z却是true。

可以看出两个是有区别的。

这个博主讲到很好:http://www.cnblogs.com/kkcheng/archive/2010/02/03/1662821.html

原理性的东西,讲的全面细致:

这篇实用性较强,尤其是group,split,replaceall,append,replacement,start,end等函数的使用,注意,后面讲的非常详细:

二、细说正则^和$(开头和结尾)

正则表达式中,^表示作为开头,$表示结尾。

如匹配以bao开头的字符串为"^bao(.*)";而"(.*)bao$"匹配以bao结尾。

但要注意,二者单独使用是全文匹配。

^bao匹配bao开头的字符串,但正则表达式"^bao"只能匹配字符串bao,而其他字符串baotou、baoqingtian都匹配不了。

如果要匹配bao开头字符串baoXXX…,要用

Stringregex = "^bao";

if("baotou".matches(regex)) {

System.out.println("全文匹配1");

}

Stringall_regex = "^baotou";

if("baotou".matches(all_regex)) {

System.out.println("全文匹配2");

}

输出为:全文匹配2。可见只能全文匹配。$结尾标示符也一样,单独用全文匹配。所以"baotou"和"^baotou$"、"baotou$"以及"^baotou"这个四个效果一样,都是全文匹配。

另外,"^$"和"^"会匹配空字符"",

给出一个综合的例子

publicstatic void main(String[] args) {

String[]filename = { "baotou", "shanghai", "beijing","shenzhen" };

Stringregex = "^bao";

if(filename[0].matches(regex)) {

System.out.println("全文匹配1");

}

Stringall_regex = "^bao(.*)";

if(filename[0].matches(all_regex)) {

System.out.println("全文匹配2");

}

Stringteststring = "ttbaotou";

Stringregex2 = "(.*)bao(.*)";

if(teststring.matches(regex2)) {

System.out.println("匹配开头1");

}

Stringregex3 = "(.*)^bao(.*)";

if(teststring.matches(regex3)) {

System.out.println("匹配开头2");

}

Stringregex4 = "(.*)^bao(.*)";

if("baotou".matches(regex4)) {

System.out.println("匹配开头3");

}

String regex5 = "(.*)bao(.*)";

if("baotou".matches(regex4)) {

System.out.println("匹配开头4");

}

}

输出为:

全文匹配2

匹配开头1

匹配开头3

匹配开头4

从例子中可以看出"^bao(.*)"匹配开头,"bao(.*)$"匹配结尾;

"(.*)^bao(.*)"其实违法,但可以用,和"^bao(.*)"一样。$有类型功能。

三、正则表达式的使用方法

从上例子中可以看到正则表达式使用方法:

1用Pattern类的complie加载正则表达式StringregEx;

2用Pattern类的Matcher函数加载要匹配的目标字符串;

3返回的Matcher m执行m.matches()进行实际匹配,匹配上返回真,否则假。

代码:

String regEx ="^(\\.\\./\\.\\.).*";

Pattern p =Pattern.compile(regEx);

Matcher m =p.matcher("http://,sdkjf,adfa,jjo,lo");

if (m.matches())

System.out.println("true");

Else

System.out.println("incorrect");

而String类自身就有字符串匹配函数matches,如"baotou".matches("(.*)bao(.*)"),可以直接使用,来验证自身匹配一个正则表达式。

String all_regex = "^bao(.*)";

if ("baotou".matches(all_regex)) {

System.out.println("全文匹配2");

}

另外,String类可以直接用两个函数startsWith()和endsWith()检验字符串开头和结尾

"baotou".endsWith(suffix);

"baotou".startsWith(prefix);

而"baotou".equals(anObject);用来验证相等。

java正则表达式结尾_java 正则表达式相关推荐

  1. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍

    java正则表达式PHP中的正则表达式函数介绍 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PC ...

  2. java正则表达式 中括号_Java正则表达式获取中括号之间的内容

    不包含中括号 正则表达式如下: \\[(.*?)] 注: .匹配除换行符\n之外的任何单字符: *匹配前面的子表达式零次或多次: ?匹配前面的子表达式零次或一次: ()标记一个子表达式的开始和结束位置 ...

  3. java 正则表达式过滤_java正则表达式过滤特殊字符

    Java用正则表达式 过滤特殊字符,只允许中文.字母Java用正则表达式 过滤特殊字符,只允许中文.字母或数字,该怎么写? String s1="我是正确测试数据aasdf2342343AS ...

  4. java 表达式写法_java正则表达式的写法

    展开全部 方法/步骤 Java正则表达式正则表达式的语法知识:Java支持Perl 5 正则表达式语法的一个子集.e69da5e6ba903231313335323631343130323136353 ...

  5. java正则表达式对象_Java正则表达式之Pattern类

    java.util.regex.Pattern类指正则表达式的编译表示形式.即将你的正则表达式字符串编译成java正则表达式对象.所有的正则表达式字符串在使用前都必须先编译成Pattern类的实例.然 ...

  6. java 正则 实例_Java正则表达式实例详解

    创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xh ...

  7. java 正则表达式语法_Java 正则表达式基础语法

    基础符号 首尾匹配^:匹配输入字符串开始的位置 $:匹配输入字符串结尾的位置 例:"^hello$"含义为该字符串开头必须为h,结尾必须为oprivate static void ...

  8. java正则表达式笔记_java正则表达式笔记

    正则表达式是一种强大的字符串处理工具,平时经常会用到.这里完整的做一次总结,以便查阅记忆. 1. 字符串中的正则表达式 使用正则表达式可以对字符串进行查找.提取.分割.替换等操作.String类当中提 ...

  9. java 正则表达式 后缀_Java 正则表达式

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其实就是一个简 ...

  10. java正则表达式教程_Java正则表达式教程及示例

    [感谢 @CuGBabyBeaR 的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试投递到 ImportNew.] 当我开始我的Java职业生涯的时候,对于我来说正则表达式简直是个是梦魇.本教程旨 ...

最新文章

  1. java.net.uri,java.net.uri
  2. 分布式监控之Zabbix-Server
  3. 基于AVS2的图片容器——TPG:现状与改进之路
  4. java重要基础知识点_java基础知识点整理
  5. android 仿直播点赞,Android-DivergeView
  6. 蓝桥杯 ALGO-112 算法训练 暗恋
  7. c语言删除行尾的空格,新人提问:如何将输出时每行最后一个空格删除
  8. Java最新JDK和API下载(持续同步更新于官网)
  9. 软考高级 真题 2009年下半年 信息系统项目管理师 论文
  10. 产品经理如何看待NPDP认证?
  11. Android开发虚拟机测试没问题,真机调试就出现问题,总是闪退!10秒解决!!
  12. 清华姚班和100个“张小龙”| 中国AI天才养成计划
  13. HTML如何制作音乐网站(如何搭建个人音乐网页)
  14. VS2010 MSDN安装
  15. WEB开发(7) Hibernate篇(上)
  16. Traceback (most recent call last):异常
  17. 前端人工智能-身高体重预测
  18. cpc按点击计算怎么算_百度竞价CPC是如何计算的?
  19. linux用rpm包装ftp,linux以rpm方式安装ftp软件
  20. LC3-仿真器的安装

热门文章

  1. Python+Tensorflow+CNN实现车牌识别
  2. User-Agent的变迁——浏览器大战之前世今生
  3. 机械原理matlab辅助分析 答案,机械原理Matlab辅助分析答案
  4. 天勤数据结构代码——树基本操作
  5. Android 触摸事件转换为鼠标事件
  6. 手把手教物体检测——M2Det
  7. 我的世界java版袭击_袭击 - Minecraft Wiki,最详细的官方我的世界百科
  8. DHT 爬虫的学习记录
  9. otsu阈值分割算法原理_局部阈值分割算法总结
  10. Wonderware-InTouch用脚本实现*邮件*发送功能