[java] 汇率换算器实现-插曲1-正则表达式(1)
[java] 汇率换算器实现-插曲1-正则表达式(1)
[java] 汇率换算器实现-插曲1-正则表达式(1)
Table of Contents
- 1 系列文章地址
- 2 前言
- 3 什么是正则表达式
- 4 正则表达式的初步运用–egrep
- 4.1 egrep支持的正则表达式的语法
- 4.2 举例说明
- 5 正则表达式更复杂的运用–perl
- 5.1 perl简单用法
- 5.2 简单的字符匹配
- 5.3 获取匹配后的内容
- 5.4 常用特殊字符, 匹配等
- 5.5 匹配后进行替换
- 5.6 一些例子
- 5.6.1 位置信息匹配
- 5.6.2 文本文档转换为html格式
- 5.7 一些元字符的缩写
- 5.8 Excape Character, 转义字符
- 5.9 字符类和字符类相似的结构
- 5.9.1 常见字符集合: [a-z] and [^a-z]
- 5.9.2 dot字符
- 5.9.3 结合字符序列的Unicode: \X
- 5.9.4 字符集缩写
- 5.9.5 Unicode特性, 字符系统, 区块
- 5.10 位置信息匹配
- 5.10.1 一行或是字符串开始与结束的位置的匹配
- 5.10.2 上次匹配的后面的位置, 以及这次匹配开始的位置: \G
- 5.10.3 匹配字符边界
- 5.11 Grouping, Capturing, Conditionals, and Control
1 系列文章地址
- java 汇率换算器的实现(1)
- java 汇率换算器的实现(2)
2 前言
回顾一下, 在上篇文章种通过正则表达式的方式, 从网页中成功提取出了相应的汇率表的内容. 这篇文章就主要来介绍一下关于正则表达式的相关内容. 想要更为深入的了解, 请见Jeffrey的
# Turn HTTP URLs into links ...
$text =~ s{
\b
(
http:// [-a-z0-9]+(\.[-a-z0-9]+)*\.(com|edu|others) \b # hostname
(
/ [-a-z0-9_:\@&?=+,.!/~*'%\$]* # 可选择的路径
(?$1}gix;
print $text;
5.7 一些元字符的缩写
一些元字符的缩写
5.8 Excape Character, 转义字符
转义字符标志着一个字符序列中出现在它之后的后续几个字符采取一种替代解释.
5.9 字符类和字符类相似的结构
5.9.1 常见字符集合: [a-z] and [^a-z]
一般在8位的系统中, [^LMNOP]表示的意思为[\x00-KQ-\xFF], 但是字符系统为Unicode的时候, 最大值将会超出\xFF, 此时它表示的范围将包括出了LMNOP以外的所有字符(the tens of thousands).
5.9.2 dot字符
一般表示匹配除了换行符以外的所有字符. 以下情况需要注意:
- 在某些的Unicode字符系统中, 如java regex package, dot一般不匹配unicode的行结尾字符
- 在match mode, 它的含意会发生变化
- 在基于POSIX标准的语言中, 并不匹配NUL, 尽管主流的脚本语言都允许在文本中出现NULLs, 并且能够匹配它们.
5.9.3 结合字符序列的Unicode: \X
\X支持匹配由多个Unicode编码组成的字符, 并且能够匹配换行符和其他Unicode行结尾符. 类似与".".
5.9.4 字符集缩写
\d: 数字[0-9], 在一些Unicode工具中为所有的Unicode数字
\D: [^\d]
\w: [0-9a-zA-Z_], 在某些工具中没有包括下划线. 如果, 支持unicode, \w通常表示为
所有的英文字母, 重要的例外, java.util.regex and PCRE, \w都表示[a-zA-Z0-9_]
\s: ascii-only系统中, [ \f\n\r\t\v]. 在unicode系统中, 有些时候还包括U+0085, \p{Z}
5.9.5 Unicode特性, 字符系统, 区块
很多unicode系统中, 经常通过"\p{quality}"来匹配包含某种特性的字符, 用"\P{quality}"来匹配不包含某种特性的字符.
Unicode的特性主要如下:
不同的字符系统的匹配, 比如匹配中文字符, \p{Han}, 区块与字符系统的匹配类似
5.10 位置信息匹配
5.10.1 一行或是字符串开始与结束的位置的匹配
5.10.2 上次匹配的后面的位置, 以及这次匹配开始的位置: \G
5.10.3 匹配字符边界
5.11 Grouping, Capturing, Conditionals, and Control
- 利用()进行分组
- 利用\1, \2获取不同组的信息
- (?: )忽略当前组合,
- 利用"|", 进行选择
- 利用(?if then | else) 进行条件选择
- 利用*, +, ?, {num, num}进行贪婪匹配
- 利用*?, +?, ??, {num, num}?进行非贪婪匹配
Date: Fri May 9 20:03:42 CST 2014
Org version 7.8.11 with Emacs version 24
Validate XHTML 1.0