前后查找:对某一位置的前后内容进行查找
1.向前查找:查找出现在被匹配文本之后的字符,但不消费那个字符
从语法上看,一个向前查找其实就是一个以?=开头的子表达式,需要匹配的文本跟在=的后面
例如:提取URL地址的协议名部分
要匹配的文本:
http://www.forta.com
http://mail.forta.com
ftp://ftp.forta.com
正则表达式:.+(?=:)
: 不包含在匹配结果里面
要匹配的文本:
http://www.forta.com
http://mail.forta.com
ftp://ftp.forta.com
正则表达式:.+(:)
: 包含在匹配结果里面
2.向后查找:查找出现在被匹配文本之前的字符,但不消费那个字符(?<=)
要匹配的文本:
ABC01: $23.45
CKS02: $109.42
CVD03: $28.45
ABC04: $98.27
XAX05: $78.98
Total items found: 5
正则表达式:\$[0-9.]+
要匹配的文本:
ABC01: $ 23.45
CKS02: $ 109.42
CVD03: $ 28.45
ABC04: $ 98.27
XAX05: $ 78.98
Total items found: 5
正则表达式:(?<=\$)[0-9.]+
区别:向前查找的长度是可变的,它可以包含.和+之类的元字符,所以它们非常灵活
向后查找模式只能是固定长度
3.把向前查找和向后查找结合起来
要匹配的文本:
<HEAD>
<TITLE> Ben forta's homepage</TITLE>
</HEAD>
正则表达式:(?<=\<[tT][iI][tT][lL][eE]>).*(?=</[tT][iI][tT][lL][eE]>)
4.对前后查找取非
向后查找价格
要匹配的文本:
I paid $ 30 for 100 apples,50 oranges and 30 pears.
I save as $ 5 on this order.
正则表达式:(?<=\$)\d+
只查找数量
要匹配的文本:
I paid $30 for 100 apples, 50 oranges and 30 pears.
I save as $5 on this order.
正则表达式:\b(?<!\$)\d+\b
\b定义两个单词边界
各种前后查找操作符:
(?=) 正向前查找
(?!) 负向前查找
(?<=) 正向后查找
(?<!) 负向后查找
1.向前查找:查找出现在被匹配文本之后的字符,但不消费那个字符
从语法上看,一个向前查找其实就是一个以?=开头的子表达式,需要匹配的文本跟在=的后面
例如:提取URL地址的协议名部分
要匹配的文本:
http://www.forta.com
http://mail.forta.com
ftp://ftp.forta.com
正则表达式:.+(?=:)
: 不包含在匹配结果里面
要匹配的文本:
http://www.forta.com
http://mail.forta.com
ftp://ftp.forta.com
正则表达式:.+(:)
: 包含在匹配结果里面
2.向后查找:查找出现在被匹配文本之前的字符,但不消费那个字符(?<=)
要匹配的文本:
ABC01: $23.45
CKS02: $109.42
CVD03: $28.45
ABC04: $98.27
XAX05: $78.98
Total items found: 5
正则表达式:\$[0-9.]+
要匹配的文本:
ABC01: $ 23.45
CKS02: $ 109.42
CVD03: $ 28.45
ABC04: $ 98.27
XAX05: $ 78.98
Total items found: 5
正则表达式:(?<=\$)[0-9.]+
区别:向前查找的长度是可变的,它可以包含.和+之类的元字符,所以它们非常灵活
向后查找模式只能是固定长度
3.把向前查找和向后查找结合起来
要匹配的文本:
<HEAD>
<TITLE> Ben forta's homepage</TITLE>
</HEAD>
正则表达式:(?<=\<[tT][iI][tT][lL][eE]>).*(?=</[tT][iI][tT][lL][eE]>)
4.对前后查找取非
向后查找价格
要匹配的文本:
I paid $ 30 for 100 apples,50 oranges and 30 pears.
I save as $ 5 on this order.
正则表达式:(?<=\$)\d+
只查找数量
要匹配的文本:
I paid $30 for 100 apples, 50 oranges and 30 pears.
I save as $5 on this order.
正则表达式:\b(?<!\$)\d+\b
\b定义两个单词边界
各种前后查找操作符:
(?=) 正向前查找
(?!) 负向前查找
(?<=) 正向后查找
(?<!) 负向后查找