正则表达式3

简介: 正则表达式

正则表达式2:https://developer.aliyun.com/article/1549163

18、字符创边界

字符串边界的元字符有两个:一个是用来定义字符串开头的^,另一个是用来定义字符串结尾的$。


^是几个有着多种用途的元字符之一。只有当它出现在一个字符集合里(被放在[和]之间)并紧跟在左方括号[的后面时,它才能发挥“求非”作用。如果是在一个字符集合的外面并位于一个模式的开头,^将匹配字符串的开头。

匹配xml,不合适的正则

匹配xml,正确的正则

 字符串

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://tips.cf"
xmlns:impl="http://tips.cf" xmlns:intf="http://tips.cf"
xmlns:apachesoap="http://xml.apache.org/xml-soap"

正则表达式

^\s*<\?xml.*\?>

结果

<?xml version="1.0" encoding="UTF-8"?>

^匹配一个字符串的开头位置,所以^\s*将匹配一个字符串的开头位置和随后的零个或多个空白字符(这解决了<? xml>标签前允许有空格、制表符、换行符等空白字符的问题)。作为一个整体,模式^\s*<\? xml.*\? >不仅能正确地匹配一个位置正确的<? xml>标签,还能对合法的空白字符做出妥善处理。


19、子表达式

子表达式是一个更大的表达式的一部分;把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当作一个独立元素来使用。子表达式必须用(和)括起来。


 字符串

Hello,my name is Ben&nbsp;Forta, and I am
the author of books on SQL,ColdFusion,WAP,
Windows&nbsp;&nbsp;2000,and other subjects.

正则表达式

(&nbsp;){2,}

结果

&nbsp;&nbsp;

( )是一个子表达式,它将被视为一个独立元素,而紧跟在它后面的{2, }将作用于这个子表达式(不仅仅是分号)。

匹配IP(简单匹配)

生产使用:

\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

字符串

Pinging hog.forta.com[12.159.46.200]
with 32 bytes of data:


正则表达式

(\d{1,3}\.){3}\d{1,3}

结果

12.159.46.200


20、回溯引用

回溯引用允许正则表达式模式引用前面的匹配结果

匹配重复单词

   字符串

This isablock of of text,
several words here are are
repeated, and and they
should not be

正则表达式

[ ]+(\w+)+[ ]+\1

结果

 of of
 are are
 and and

[ ]+匹配一个或多个空格,\w+匹配一个或多个字母数字字符,[ ]+匹配随后的空格。注意,\w+是括在括号里的,它是一个子表达式。这个子表达式不是用来进行重复匹配的,这里根本不涉及重复匹配的问题。这个子表达式只是把整个模式的一部分单独划分出来以便在后面引用。这个模式的最后一部分是\1;这是一个回溯引用,而它引用的正是前面划分出来的那个子表达式:当(\w+)匹配到单词of的时候,\1也匹配单词of;当(\w+)匹配到单词and的时候,\1也匹配单词and。

匹配html

   字符串

<BODY>
<H1>Welcome to my Homepage</H1>
Content is divided into two sections:<BR>
<H2>ColdFusion</H2>
Information about Macromedia ColdFusion.
<H2>Wireless</H2>
Information about Bluetooth,802.11,and more.
<H2>Thisisnot valid HTML</H3>
</BODY>

正则表达式

<[Hh][1-6]>.*?</[Hh][1-6]>

结果

<H1>Welcome to my Homepage</H1>
<H2>ColdFusion</H2>
<H2>Wireless</H2>
<H2>Thisisnot valid HTML</H3>

原始文本里有一个标题是以<H2>开头、以<H3>结束的。这个是不合法的标题。

正则表达式

<[Hh]([1-6])>.*?</[Hh]\1>

21、回溯替换

在一个用来保存用户信息的数据库里,电话号码被保存为313-555-1234。现在,你需要把电话号码重新排版为(313)555-1234。

    字符串

313-555-1234
248-555-9999
810-555-9000

正则表达式

(\d{3})(-)(\d{3})(-)(\d{4})

结果

313-555-1234
248-555-9999
810-555-9000

替换表达式

($1) $3-$5

结果

(313) 555-1234
(248) 555-9999
(810) 555-9000

这里使用了两个正则表达式模式。第1个模式看起来很复杂,我们来分析一下。(\d{3})(-)(\d{3})(-)(\d{4})用来匹配一个电话号码,它被划分为5个子表达式(5个组成部分):第1个子表达式(\d{3})匹配前3位数字,第2个子表达式(-)匹配-字符,等等。最终的结果是一个电话号码被划分成了5个部分(每个部分分别对应着一个子表达式):区号、一个连字符、电话号码的前3位数字、又一个连字符、电话号码的后4位数字。这5个部分都可以单独拿出来使用,负责重新排版电话号码的替换模式($1)$3-$5只用到了它们当中的3个,剩下的两个没有用到,但这已足以把313-555-1234转换为(313)555-1234。

22、大小写转换

23、向前查找

向前查找指定了一个必须匹配但不在结果中返回的模式。向前查找实际就是一个子表达式,而且从格式上看也确实如此。从语法上看,一个向前查找模式其实就是一个以?=开头的子表达式,需要匹配的文本跟在=的后面。

字符串

http://www.forta.com/
https://mail.forta.com
ftp://ftp.forta.com/

正则表达式

.+(?=:)

结果

http
https
ftp

+(:)查找到并且匹配结果包含:,模式.+(? =:)查找到但匹配结果不包含:。

24、向后查找

向后查找操作符是?<=。

分不清?=、? <=与其他?的话,有个简单的办法可以帮你分辨它们:有小于号的是向后查找操作符——你可以把这个小于号想像成一个箭头,它指向文本阅读方向的后方。

 字符串

ABC01: $23.45
HGG42: $5.31
CFMX1: $899.00
XTC99: $69.96
Total items found:4

正则表达式

(?<=\$)[\d.]+

结果

23.45
5.31
899.00
69.96

25、 对前后查找取非

负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本,负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。

匹配价格

 字符串

I paid $30 for 100,
apples,50 oranges,and 60 pears.
I saved $5 on this order.

正则表达式

(?<=\$)[\d]+

结果

30
5 


匹配数量

相关文章
|
2月前
|
缓存 Windows
错误代码0x8007000d处理方法?
错误代码0x8007000d通常与系统文件损坏、安装介质问题或更新文件缺失相关,以下是综合解决方案:
|
1月前
|
SQL 分布式计算 监控
终于有人把数据倾斜讲清楚了
本文深入剖析大数据处理中的“数据倾斜”问题,从现象到本质,结合真实踩坑经历,讲解数据倾斜的成因、典型场景及四步精准定位方法,帮助开发者从根本上理解和解决这一常见难题。
终于有人把数据倾斜讲清楚了
|
1月前
|
人工智能 安全 数据挖掘
MCP
模型上下文协议(MCP)是一种全新开放标准,旨在解决大型语言模型(LLM)与外部世界连接的局限。它为LLM与工具、数据库、硬件等建立统一、安全、标准化的通信机制,让AI从“全能模型”转变为可连接万物的“生态核心”,推动AI应用向更广泛领域扩展,开启通往通用人工智能(AGI)的新篇章。
|
开发者 知识图谱
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
今天,阿里技术公布一波阿里P8、P9技术大牛的思维模型,将他们的思维模式呈现出来。你可以在阿里资深专家职业生涯的真切感悟中,找到应对危机的最佳方法。《阿里工程师的自我修养》现已正式公开,可免费下载阅读。
136140 1
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
|
4月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
6月前
|
搜索推荐 应用服务中间件 PHP
301重定向完整指南: 原理、应用与实现方法
301重定向是一种永久性URL转发技术,用于将旧链接的权重传递给新URL,有助于SEO优化、提升用户体验和维护网站流量。本文介绍了301重定向的应用场景(如更换域名、HTTP转HTTPS等)、实现方法(Apache、Nginx、PHP等)及最佳实践,并解答了常见问题,帮助用户正确配置以确保网站无缝过渡。建议在操作前备份配置并使用工具验证效果。
596 10
|
11月前
|
人工智能 前端开发 计算机视觉
Inpaint-Web:纯浏览器端实现的开源图像处理工具
在刷短视频时,常看到情侣在景区拍照被路人“抢镜”,男朋友用手机将路人“P”掉,既贴心又有趣。最近我发现了一个纯前端实现的开源项目——inpaint-web,可在浏览器端删除照片中的部分内容,非常酷。该项目基于 WebGPU 和 WASM 技术,支持图像修复与放大,已在 GitHub 上获得 5.1k Star。项目地址:[GitHub](https://github.com/lxfater/inpaint-web)。
549 3
 Inpaint-Web:纯浏览器端实现的开源图像处理工具
|
11月前
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的Transformer模型及其在自然语言处理中的应用
探索深度学习中的Transformer模型及其在自然语言处理中的应用
465 5
|
存储 人工智能 运维
阿里云自研存储部件创新亮相2024全球闪存峰会
阿里云在AI时代背景下对自研存储部件进行的一系列创新实践并取得丰硕成果。
阿里云自研存储部件创新亮相2024全球闪存峰会
|
12月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
236 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用