最好养成按照字符来理解正则表达式的习惯
不要这样:
^cat 匹配以cat开头的行
而应该这样理解:
^cat 匹配以c作为一行的第一个字符,紧接着一个a,紧接着一个t的文本
在字符组[]内部,连字符 - 才是元字符,才表示一个范围。如:[0-9], [a-z],在字符组[]外面的连字符 - 只能匹配连字符,而不是范围。在字符组[]内部,如果连字符-在开头,就是普通的连字符。如:[-1] , 03[-./]19[-./]76 这里的连字符 - 紧接着[ 或者 [^ 出现,形成 [- 或者 [^- 。如果采用 [.-/] 就是错误的用法。
字符组[]的多重范围也是允许的: [0-9a-zA-Z]
在字符组[]里面,问号?,点号 . 都不是元字符。在字符组[]里面和外面,元字符的定义和意义是不一样的。
03[-./]19[-./]76 匹配:03-19-76, 03.19.76, 03/19/76
^在字符组[]内部就是一个元字符,在字符组[]外面,就是一个锚点
q[^u] 排除行字符组[]表示“匹配一个未列出的字符”,而不是“不要匹配列出的字符”。一种简单的理解就是除了“排除型字符组中所有字符”以外的字符
用点号匹配任意字符
一个很重要的问题,写正则表达式时,需要在对欲检索的文本的了解程度与检索精确性之间求得平衡。
我们来匹配 gr[ea]y,还可以写作 grey|gray ,或是 gr(e|a)y
注意 gr[e|a]y 不是我们想要的,因为元字符字符组[]里面和外面的定义和意义都不一样。
或 | 字符构成“多选结构”
一个字符组[]只能匹配单个字符,而多选结构自身可能是完整的正则表达式,可以匹配任意长度的文本。
量词:?, +, *
? 零次或一次 (可以不出现,也可以只出现一次:单次选择)
+ 一次或多次(可以出现无数次,但至少要出现一次:至少一次)
* 任意次(零次,大于零次)(可以出现无数次,也可以不出现:任意次数均可)
区间:{min,max}
括号()的分组顺序是按照开括号 '(' 从左至右的出现顺序进行的。
(.+) \1 matches 'the the' or '55 55'
变量名: 标识符只包含字母、数字以及下划线,但不能以数字开头。[a-zA-Z_][a-zA-Z0-9]*
引号内的字符串:"[^"]*"
() 分组,捕获。
(?:)分区,不捕获。
股票价格9.05000000037272 ,这里显然应该是 9.05 ,但是因为计算机内部表示浮点的原理,有时会以没什么用的格式输出这样的结果 9.5000000037272 。
要求归结为:通常是保留小数点后面两位数字,如果第三位不为零,也需要保留,去掉其他的数字。结果就是 12.375000000392或者12.375会被修正为 12.375,而 37.500会被修正为 37.50
正则表达式: (\.\d\d[1-9]?)\d*
public class Test { /** * @param args */ public static void main(String[] args) { String str = "9.50000000037272"; String str1 = "11.07100000037272"; System.out.println(testFormatDecimal(str)); // output : 9.50 System.out.println(testFormatDecimal(str1)); // output : 11.071 } private static String testFormatDecimal(String numberString) { String regex = "(\\.\\d\\d[1-9]?)\\d*"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(numberString); if (matcher.find()) { return matcher.replaceAll(matcher.group(1)); } return null; } }
正则表达式之分组语法
捕获
(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp)匹配exp,并捕获文本到名称为name的组里
(?:exp)匹配exp,不捕获匹配的文本
位置指定
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
注释
(?#comment)这种类型的组不对正则表达式的处理产生任何影响,只是为了提供让人阅读注释
相关推荐
基于stc单片机读取TMP112温度
基于CC430单片机的IIC通信协议的TMP102温度传感器的测试程序
TI TMP112系列驱动核心部分,采用STM32F103RCT6
用STM32实现的TMP102温度传感器!非常精确!
使用STM32F103实现和TMP102温度传感器的通信,程序已经实测,附有简单的说明文档。
基于STM32F103,测试TMP102的不同工作模式,包括连续转换、关断、单次转换、IIC通信速率、警报配置等诸多功能,分成了8个程序,每个程序内都有txt文件标识测试的内容。
简单tmp 清理工具 傻瓜工具 批处理文件 可以一键清理系统tmp文件残留
TMP117温度传感器驱动函数及单片机(stm32、Arduino)工程代码
一、安装LoadRunner时出现“计算机缺少vc2005_sp1_with_atl_fix_redist”的解决办法 在lr安装包里面 loadrunner-11\lrunner\En\prerequisites\...loadrunner11\lrunner\MSI\dat\monitors\add_to_xmlmonitorshared.tmp
tmp102的温度获取程序
基于51单片机的温度传感器TMP112的c程序
TMP117的驱动代码,适配普中开发板51
使用FPGA控制TMP117温度传感器,包含寄存器初始化及温度读取两个功能。 start_sig控制功能,01为初始化寄存器,10为读取温度数据,其余值不进行任何操作。
使用模拟I2C,读取TMP75温度值
温度传感器TMP112驱动程序文件,传感器tmp112驱动
该程序基于STM32 HAL库的基础上,使用硬件I2C 驱动TMP75数字温度传感器;实现读取环境温度值!代码是自己写的,实测可用!!!
STM32F030使用内置晶振,使用软件模拟I2C驱动TMP112程序
IIC 读写TMP101温度传感器
自己写的一个TMP100的程序,经过测试,TMP175也可以用,采用的是触发式节能模式,最常用的模式。通过串口返回值(注意用字符显示模式!)
TMP102温湿度传感器,基于STM32L072RB写的采集程序,完整例程,包含I2C,添加工程可以直接使用.