正则表达式之基本概念
在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢?
正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。 它的应用非常广泛,特别是在字符串处理方面。其常见的应用如下:
验证字符串,即验证给定的字符串或子字符串是否符合指定的特征,例如,验证是否是合法的邮件地址、验证是否是合法的HTTP地址等等。
查找字符串,从给定的文本当中查找符合指定特征的字符串,这样比查找固定字符串更加灵活。
替换字符串,即查找到符合某特征的字符串之后将之替换。
提取字符串,即从给定的字符串中提取符合指定特征的子字符串。
第一部分:正则表达式之工具
正所谓工欲善其事必先利其器! 所以我们需要知道下面几个主要的工具:
http://www.regexpal.com/ 这个网站中,我们可以在线测试正则表达式。
http://regexr.com/ 这个网站更为推荐,它自身还包括了一个实例使我们直接测试。
第二部分:正则表达式之元字符
正则表达式中元字符恐怕是我们听得最多的了。元字符(Metacharacter)是一类非常特殊的字符,它能够匹配一个位置或者字符集合中的一个字符。 如.、\w等都是元字符。
刚刚说到,元字符既可以匹配位置,也可以匹配字符,那么我们就可以通过此来将元字符分为匹配位置的元字符和匹配字符的元字符。
A匹配位置的元字符---^、$、\b
即匹配位置的元字符只有^(脱字符号)、$(美元符号)和\b这三个字符。分别匹配行的开始、行的结尾以及单词的开始或结尾。它们匹配的都只是位置。
1.^匹配行的开始位置
如^zzw匹配的是以"zzw"为行开头的"zzw"(注意:我这里想要表达的是:尽管加了一个^,它匹配的仍是字符串,而不是一整行!),如果zzw不是作为行开头的字符串,则它不会被匹配。
2.$匹配行的结尾位置
如zzw$匹配的是以"zzw"为行结尾的"zzw"(同样,这里$只是匹配的一个位置,那个位置是零宽度,而不是一整行),如果zzw不是作为行的结尾,那么它不会被匹配。
于是结合^和$我们就不难猜测^zzw$匹配的是某行中只有zzw这个字符串了。
而^$匹配的则是一个空行,这个空行中不包含任何字符串。
3. \b匹配单词的开始或结束
如 \bzzw匹配的是zzw之前是空格符号、标点符号或换行符号的zzw(注意:但\b匹配的仅是一个零宽度的位置,而不会匹配空格、标点符号或换行符号)。
而zzw\b匹配的是zzw之后是空格符号、标点符号或换行符号的zzw(同样,\b匹配的是一个零宽度的位置)。
显然 \bzzw\b匹配的就是zzw的前后必须是空格符号、标点符号或换行符号的zzw。
B 匹配字符的元字符---. 、\w、\W、\s、\S、\d、\D
即匹配字符的元字符共有七个。
其中.(点号)表示匹配除换行符之外的任意字符;
\w 匹配单词字符(不仅仅是字母,还有下划线、数字和汉字);\W匹配任意的非单词字符(注意,与\w刚好相反);
\s匹配的是任意的空白字符(如空格、制表符、换行符、中文全角空格等);
\S匹配的是任意的非空白字符(注意:刚好和\s相反);
\d匹配任意的数字;
\D匹配任意的非数字字符(注意:刚好和\d相反)。
例子如下所示:
上面的四个例子从左到右依次表示:
^.$表示匹配一行中的唯一一个任意的非换行符的字符
\ba\w\w\w\w\w\w\w\w\w\b表示匹配以字母a开始的后面有9个字母字符的单词。 (注意:其中的a并不是元字符,就是一个普通的字符,我们称之为字符串字面值(string literal)-所谓字符串字面值,就是字面上看起来是什么就是什么)
\b\w\w\w\d\d\d\d\D\b表示匹配以3个字母字符开始后面紧跟着四个数字字符且最后一个不是数字字符的单词。
第三部分:正则表达式之文字匹配
这一部分我们将通过字符类、字符转义、反义这几个部分来学习。
A、字符类
字符类是正则表达式中的“迷你”语言,可以在[]中定义。
最简单的字符类可以由[]和几个简单的字母组成。比如[aeiou]可以匹配aeiou五个字母中的任意一个。[0123456]可以匹配0123456这七个数字中的任意一个。而可以匹配到HTML标记中的中的任意一个标记。而[bhc]at就会匹配字符串bat、hat、cat。也就是说字符类[]中的多个字符只会匹配其中一个。
但是显然[0123456]、这样的表示太麻烦,需要写的很多,所以我们可以使用 -连字符)来简写之,如[0-6]和。于是可知[0-9]和\d的作用是一样的。[a-z]可以表示所有的小写字母,[A-Z]可以表示所有的大写字母。[a-zA-Z]可以表示所有的大写字母和小写字母。
值得注意的是 -(连字符) 只有在字符类中的中间位置时才是“到”的意思。而[-b]5中-没有在两个字符之间,所以它表示的是-5或者b5。
除此之外,我们知道^时只匹配行的开头,但是如果^出现在字符类中的第一个位置,那么它表示否定该字符类。如[^123]表示匹配不是数字1或2或3的其他任意字符。[^-]表示匹配不是-的任意字符。
由此我们也可以发现:在字符类中使用元字符(-、^等)时,不需要进行转义运算。
更常用的有[^aeiou]匹配元音之外的字符、[0-9a-zA-Z_]匹配任何数字、字母(大写和小写)和下划线,这等同于\w、[^0-9a-zA-Z_]匹配任何非数字、字母(大写和小写)和下划线,这等同于\W。
B、字符转义
我们知道元字符如&、^、.等都表示着特殊的涵义,如果我们希望把他们看作一般的字符去匹配字符串,并且恰好他们又都不在字符类(如[&]中),我们就需要使用\(反斜杠)进行转义了。
如我们可以使用www.jb51.net来匹配www.jb51.net。 我们可以用\*来匹配字符串中的*(通配符)。 我们还可以通过\\来匹配\。举例如下所示:
C.反义
实际上我们在前面已经说过了,这里再说一遍是因为希望可以引起注意,即^再字符类中的最前面时表示对这个字符类中的字符表示否定。如a[^b]匹配a和a后面不是b的字符。又如]>表示匹配的字符。举例如下:
第四部分:正则表达式之限定符
什么是限定符呢? 我们知道,在前面的例子中,我曾经使用过\ba\w\w\w\w\w\w\w\w\w\b表示匹配以字母a开始的后面有9个字母字符的单词,显然这样写是十分麻烦的,如果我们能把\w这些重复的用简单的形式来写就好了~ 没错,限定符就是干这个的,利用限定符我们可以重新写成\ba\w{9}\b。对,就是这么简单! 下面让我们了解更多吧。
{n} 表示重复n次,如\w{5}表示匹配个单词字符。
{n,} 表示重复至少n次,如\w{5}表示匹配至少5个单词字符,也可以是6个,7个……
{n,m} 表示重复至少n次,最多m次,如\w{5,10} 表示匹配至少5个,最多10个单词字符。
* 表示重复至少0次。 等同于{0,} ,即hu*t可以匹配ht或hut或huut或huuut……
+ 表示重复至少1次。 等同于{1,},即hu+t可以匹配 hut或huut或huuut……
? 表示重复0次或1次。等同于{0,1},即colou?r表示匹配color或者是colour。
显然,上面的限定符所指的i安定都是限定的前面的某一个字符。
但是,如果我们在上面的限定符之后加上一个?呢 ,这时我们称之为懒惰限定符。 相应地,我们称上面几种匹配为贪婪匹配。
{n}? 等同于{n}
{n,}? 尽可能少的使用重复,但至少使用n次
{n,m}? 重复n次到m次之间,但要尽可能少的使用重复。
*? 尽可能少的使用重复的第一个匹配
+? 尽可能少的使用重复,但至少使用1次
?? 使用零次重复(如果有可能)或者一次重复
比如:对于aabab这个要 匹配的字符串而言,使用a.*b会匹配aabab,而如果使用a.*?b就会匹配aab和ab,而不是匹配所有。
第五部分:正则表达式之字符的运算
字符的运算包括替换、分组和反向引用,下面我将逐项介绍。
A 替换
什么是替换呢? 显然就是指一个不行,我用另一个来替换,比如0\d{3}-\d{7}|0\d{2}-\d{8} 就表示匹配前4位为区号、后7位为本地号码的电话号码,亦可匹配前3位为区号、后8位为本地号码的电话号码。| 表示的就是替换了。 又如[Jj]ack和Jack|jack的匹配效果是一样的都是用来匹配Jack或jack的。也就是说,替换|是或运算的关系。
在一般的或运算中0 0结果为0, 0 1结果为1, 1 0结果为1, 1 1结果为1。那么在正则表达式中同样是这样,如果一个都匹配不上就不匹配;如果有一个能匹配上就匹配一个;如果两个都能匹配上,就匹配两个。 举例如下所示:
B.分组
正则表达式中,分组也是一个非常重要的概念。看似复杂,实际上分组就是使用"("和")",即左圆括号和右圆括号将某些字符括起来看成一个整体来处理。
比如我们希望匹配abcabc。如果是abc{3}匹配的就是abccc,这不能达到预期,所以我们可以对abc分组,即(abc){3}就可以匹配到我们想要的字符串了。
又如(\d{1,3}\.){3}\d{1,3}也用了分组的运算方式,它可以用来匹配简单的IP地址,如下所示:
C 反向引用
上面我们通过()可以进行分组,而分组的同时,每一个组被自动赋予了一个组号,该组号可以代表该组的表达式。
编组的规则是:从左到右、以分组的左括号"("为标志,第一个分组的组号为1,第二个分组的组号为2,以此类推。
这时,反向引用就派上用场啦。我们就可以用它来反向引用使用()括起来的字符组了。具体怎么引用呢?规则如下:
\数字,使用数字命名的反向引用。注:这个是通用的一种方式。
\k,使用指定命名的反向引用。注:这个是.NET Frameword支持的一种方式。
下面的几个例子是使用数字命名的反向引用:
其中我们可以看到第一个和第二个匹配的并不相同---第一个匹配的是两个任意单词字符组成的单词,而第二个由于是使用了反向引用,那么它就必须是两个重复单词字符组成的单词。
最后一个我使用了两个分组,根据分组规则可知\w{3}\d{2}是第一个分组,\d{2}是第二个分组。 同样注意:反向引用的是同样的字符,如www55www5566,最后两位不同,这就无法正确匹配了。
使用指定命名(也就是自定义命名)的反向引用
对于上面的第二个例子,我们用自定义命名的反向引用可以写成\b(?\w)\k\b或者是\b(? 'myName' \w)\k\b。 本想举例试一下,结果都提示错误,可能是上面提到的两个在线网站不支持吧~
当然,如果我们希望只是将之看作一个整体,而不希望给其编号,可以使用(?:expression)的方式。如下所示:
另外,下面几个也是常用的分组:
(?=expression)匹配字符串expression前面的位置
(?!expression)匹配后面不是字符串expression的位置
(?<=expression)匹配字符串expresssion后面的位置
(?
(?>expression)只匹配字符串expression一次
D.零宽度断言
之前介绍的^和$都是匹配的一个满足一定条件的位置。这里把满足的一个条件成为断言或零宽度断言。
常用的有:
^ 匹配行的开始位置
$ 匹配行的结束位置
\A 匹配必须出现在字符串的开头
\Z 匹配必须出现在字符串的结尾或字符串结尾处的\换行符好n之前
\z 匹配必须出现在字符串的结尾
\G 匹配必须出现在上一个匹配结束的地方
\b 匹配字符的开始或结束位置
\B 匹配不是在字符的开始或结束位置
之前所提到的(?=expression)、(?!expression)、(?<=expression)、(?
其中(?=expression)称为零宽度预测先行断言,它断言自身位置的后面能够匹配表达式expression。如\b\w+(?=ed\b)可以匹配以字符串ed结尾的单词的前面部分,如reseted中的reset。
其中(?<=expression)又称为零宽度正回顾后发断言,它断言自身位置的前面能够匹配表达式expression。如(?<=\ban)\w+\b可以匹配除字符串an之外的部分。
E 负向零宽度断言
(?!expression)称为负向零宽度断言,即断言自身位置的后面不能匹配字符串expression。
如\b\w{3}(?!\d)匹配的是后面不是数字的以三个单词字符开头的三个单词字符。如下所示:
F 优先级顺序
正则表达式中存在元字符、转义符、限定符、|等运算或表达式。在匹配过程中,正则表达式都事先规定了这些运算或表达式的优先级。正则表达式也可以像数学表达式一样来求值。也就是说,正则表达式可以从左到右、并按照一个给定的优先级来求值。
优先级顺序表(优先级由高到低)如下:
转义符:\
圆括号和方括号:()、(?:)、(?=)、[]
限定符: *、+、?、{n}、{n,}、{n,m}
位置和顺序:^、$、\(元字符)
或运算:|
我们可以看到或运算的优先级是最低的。
第六部分:典型正则表达式解释
A 匹配windows运算系统的名称
我们可以通过下面的正则表达式来精确匹配windows运算系统的名称
windows\s*((95)|(98)|(2000)|(2003)|(ME)|(XP)|(7)|(8)|(10))
这样就可以精准匹配windows的各种版本的运算系统了,显然这个是非常冗长的,我们还可以用一种不精准的方式匹配,如下所示:
其中s*表示至少重复0次。即windows10(无空格), windows 10(一个空格), windows 10(两个空格)等都可以正确匹配。
B 匹配HTML标记
HTML标记一般由尖括号包围,如、
、 等等。所以我们可以使用下面的正则表达式来匹配HTML标记。
到此这篇关于正则表达式用法详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
你可能感兴趣的:(正则表达式用法详解)
Vue2中的keep-alive:组件状态缓存与性能优化实战指南
编程随想▿
Vue 前端 javascript 开发语言 vue.js
目录一、什么是keep-alive?与普通组件切换的对比二、核心用法详解1.基础用法:动态组件缓存2.路由视图缓存3.生命周期钩子三、进阶配置与优化1.精准控制缓存组件(1)include/exclude属性(2)max属性限制缓存数量四、实战场景与案例1.表单数据保存2.标签页切换优化3.动态控制缓存五、避坑指南1.组件必须定义name属性2.避免过度缓存3.相同路由不同参数导致缓存失效六、性能
Python网络数据采集的方法
蚂蚁ai
Python零基础 Python python 开发语言
听说还有很多小伙伴还不知道网络数据采集的方法,让我来看看都有谁,不说话我就点名了。我把教程分享在下面了,需要的小伙伴自己领取。(https://jq.qq.com/?_wv=1027&k=kYtMeTfp)一般情况下以下四种方式都是可以匹配到结果的,只是复杂程度不一致,根据情况进行选择。◾正则re的使用◾bs4的使用◾xpath◾PyQuery①Re(RegularExpression正则表达式)
Python类的基础与高级用法详解
在Python中,类(Class)是面向对象编程(OOP)的核心概念,用于创建对象的蓝图。它定义了对象的属性和行为,支持代码复用、封装、继承和多态。接下来,从多个维度详细解释类的核心概念:一、类的基本结构classMyClass: #类变量(所有实例共享) class_variable="SharedData" #构造方法(初始化实例属性) def__init__(self,name):
python 海象运算符_python := 海象运算符
伶邪
python 海象运算符
最近在做算法题越来越发现python写法真的挺好用的记下来map(lambdax:sum(x))中lambda代表匿名函数re.findall(r'0+|1+',s)是正则表达式:=海象运算符转if(n:=len(a))>10:print(f"Lististoolong({n}elements,expected10:print(f"Lististolong({len(a)}elements,exp
python := 海象运算符
challenge-linge
it it
参考视频教程:**体系课-Go+Python双语言混合开发盯紧技术先机抓紧高薪机遇**最近在做算法题越来越发现python写法真的挺好用的记下来map(lambdax:sum(x))中lambda代表匿名函数re.findall(r’0+|1+’,s)是正则表达式:=海象运算符转背景:python3.8正式版最近更新了,其中PEP572中的海象运算符获得正式python版本的支持.我看了官网的文档
Compose 高级用法详解——AI教你学Docker
LuckyLay
AI教你学Docker docker 容器 运维
3.6Compose高级用法详解DockerCompose除了常规的多服务编排,还支持一系列高级功能,如服务健康依赖、环境切换、配置模板化等。掌握这些技巧,能让你的多容器项目更健壮、更自动化、更易维护。一、depends_on的高级用法与启动顺序1.基本用法depends_on指定服务间的启动顺序,确保依赖的服务优先启动。services:web:depends_on:-dbdb:image:po
正则表达式
运用正则表达式进行爬虫就是把想要得到的信息爬取出来贪婪爬取和非贪婪爬取replace(正则表达式,新的内容)符合正则表达式的被替换成新的内容(返回值是String)split(正则表达式)按照正则表达式规则切割字符串(返回值是String[]),遍历数组就可以得到了分组其实就是把内容分组,然后用组号代替内容复制,这样就不用多写几遍练习:其实正则表达式不用背,以后要用的时候直接右键选择插件下载的选择
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
Bruce-li__
Python python 网络 数据库
文章目录前言一、asyncio基础概念1.1什么是异步编程?1.2asyncio核心组件二、asyncio核心用法详解2.1事件循环管理2.2协程与任务2.3异步上下文管理器三、asyncio高级特性3.1异步生成器3.2异步队列3.3异步锁和信号量四、asyncio实战项目4.1高性能Web爬虫4.2异步Web服务器五、性能对比与最佳实践5.1同步与异步性能对比5.2asyncio最佳实践六、常
Java 正则表达式
你都会上树?
Java java 正则表达式
基本语法元字符转义号\\限定符符号含义*指定前面内容可以出现0次及以上+指定前面内容可以出现1次及以上。至少会出现一次?指定前面内容可以出现0次或一次{n}指定前面的内容只能出现n次{n,}指定前面内容至少出现n次{n,m}指定前面内容至少出现n次但不多于m次选择匹配符符号解释|逻辑或的含义,符号两边内容有一个成立即可|分组组合和反向引用符分组常用分组构造形式说明(pattern)非命名捕获。捕获
【Python】Hydra 用法详解
行码棋
# Python python 开发语言
Hydra官方文档Hydra(Python配置管理工具)1.引言在机器学习、深度学习和软件开发中,管理复杂的配置是一个常见的挑战。Hydra是一个强大的Python库,允许开发者轻松地管理和组织配置文件,支持动态参数覆盖、多层次配置和可组合配置等特性。2.安装HydraHydra可以通过pip直接安装:pipinstallhydra-core安装完成后,你可以使用hydra进行配置管理。3.基础用
linux中at重定位命令,readelf命令_Linux readelf 命令用法详解:用于显示elf格式文件的信息...
默默加一
linux中at重定位命令
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BF
realloc() 用法详解
小可爱amour
C/C++ 算法
原型:externvoid*realloc(void*mem_address,unsignedintnewsize);语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小若小于原来的大小,原数据的末尾可能丢失(被其他使用内存的数据覆盖等)头文件:#include有些编译器需要#include,在TC2.0中可以使用alloc.h头文件功能:先判断当前的指针是
ORACLE数据库转国产阿里OceanBase数据库
1.BLOB类型修改将接口内oracle.sql.BLOB改为java.sql.Blob2.REGEXP_LIKE判断函数正则表达式中字符转义问题OB的正则表达式使用的是标准的Linux模式,oracle是黑盒子,在处理部分转义符([]+)的时候,Oracle无需使用转义符,OB务必使用转义符,加/转义处理,例如在regexp_like(t.xx,’^(+|[0-9]+)$’)改为regexp_l
通达信 强势突破战法:百战百成 量价齐升+均线多头擒牛指标幅图指标
q125500612
通达信指标 通达信指标
指标用法详解核心逻辑该指标旨在筛选强势突破+量价齐升+趋势向上的个股,适用于短线或波段交易策略。一、趋势判断条件均线系统股价开盘低于20日/40日/60日均线(短期调整后蓄势)收盘价突破20/40/60日均线的最高值(确认趋势反转)5/10/30/60/120日均线呈多头排列(开盘在最低均线下,收盘站上最高均线,代表短期强势)EXPMA趋势强化股价站稳50日EXPMA(指数平滑均线)上方50日EX
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
AI、少年郎
oracle 数据库
在《Oracle树形统计再进阶》(第三课)基础上,我们跳出传统SQL聚合框架,探索Oracle特有的高级语法特性,包括多维分析神器MODEL子句、数据清洗利器正则表达式、PL/SQL存储过程优化,以及基于执行计划的查询调优技巧。这些技术能解决传统方法难以处理的复杂场景,如动态列生成、不规则数据清洗、批量数据处理等。一、MODEL子句:多维数据建模与动态透视业务场景:动态生成各部门全年度各季度请假类
【ES6新特性】解构赋值常见用法
小钟H呀
ES6新特性学习手册 es6 前端 javascript
ES6解构赋值用法详解一、解构赋值基础概念解构赋值(DestructuringAssignment)是ES6新增的语法,可以快速从数组或对象中提取值并赋给变量。1.1传统取值方式vs解构赋值//传统方式constarr=[1,2,3];consta=arr[0];constb=arr[1];//解构赋值const[x,y]=[1,2,3];console.log(x);//1console.log
Qt 各种功能学习笔记
栈不收
qt 学习 笔记
目录1.Qt关于数据库1.1Qt链接数据库1.2将数据库的模型显示在控件中2.Qt关于控件2.1用正则表达式设置输入框只能输入正浮点数2.2设置QDateTimeEdit的时间格式和设置为当前时间1.Qt关于数据库1.1Qt链接数据库基础教学:使用Qt链接MySql数据库_qt连接mysql_栈不收的博客-CSDN博客需要注意的问题:在链接MySQL的时候,首先要确保MySQL已经安装成功在目录Q
【实战演练】运维工程师初试必胜指南:解析公司笔试真题与技巧分享
江湖有缘
运维工程师面试专栏 运维 服务器 Linux 面试 求职
【实战演练】运维工程师初试必胜指南:解析公司笔试真题与技巧分享一、填空题1.第1题:修改网卡IP地址2.第2题:基本文件相关命令解释3.第3题:新建用户4.第4题:设置文件权限5.第5题:路由协议RIP6.第6题:ping命令相关7.第7题:创建目录8.第8题:正则表达式9.第9题:列出文件10.第10题:如何查看系统信息11.第11题:重命名文件12.第12题:修改用户密码13.第13题:如何向
Golang动态路由实现:灵活处理URL路径
Golang编程笔记
Golang编程笔记 Golang开发实战 golang 开发语言 后端 ai
Golang动态路由实现:灵活处理URL路径关键词:Golang动态路由、URL路径处理、参数化路由、通配符匹配、路由算法、HTTP框架、RESTful设计摘要:本文深入探讨Golang中动态路由的实现原理与实践方法,从基础概念到复杂场景逐步解析。通过对比标准库与第三方框架的路由机制,详细讲解参数捕获、通配符匹配、正则表达式路由等核心技术。结合具体代码示例演示如何构建高性能路由系统,涵盖路由匹配算
力扣第10题-正则表达式匹配
清风序来
力扣算法(python) leetcode 正则表达式 服务器
力扣链接:10.正则表达式匹配-力扣(LeetCode)给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.'匹配任意单个字符'*'匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例1:输入:s="aa",p="a"输出:false解释:"a"无法匹配"aa"整个字符串。示例2:输入:s="aa",p="a*"输出:true解
正则表达式半匹配Markdown中的图片/链接格式
薄荷你玩_
机器学习/深度学习 正则表达式 Markdown 大模型
使用正则表达式匹配Markdown中的图片格式,判断文本是否是图片/链接的开头(不完整):判断文本结尾是否符合Markdown中图片的格式要求Markdown中图片的格式:正则表达式:.*\!(\[([^[\]]*(\](\([^)]*)?)?)?)?$defis_incomplete_image_markdown(s):"""检查chunk是否是图片的部分:params
Java-Matcher类
Lowjin_
Java 开发语言 java
Matcher类是Java正则表达式API的核心组件之一(位于java.util.regex包),用于执行复杂的字符串匹配操作。它与Pattern类配合使用,提供查找、替换、分组提取等功能。1.Matcher类的作用对输入字符串执行匹配操作(查找、替换等)支持分组提取(通过()捕获的子表达式)提供位置信息(匹配的起始和结束索引)支持多次匹配和重置2.创建Matcher对象Matcher对象必须通过
Java-Scanner类
Lowjin_
Java 开发语言 java
Scanner是Java中一个实用的文本扫描工具类(位于java.util包),主要用于从输入流(如键盘、文件或字符串)中解析基本数据类型和字符串。它通过正则表达式将输入分解为标记(tokens),并提供了多种方法来读取和转换这些标记。1.Scanner的核心功能功能说明读取输入从键盘、文件、字符串等来源读取数据。按类型解析自动将输入的文本转换为int、double、String等类型。分隔符控制
Python 常用正则表达式大全
朱公子的Note
python 爬虫 正则表达式
你是否在写Python爬虫时,总是卡在“正则提取”这一步?明明页面源码已经拿到,却怎么也匹配不到目标数据……不是提取失败,就是提取不全,搞得调试半天还抓不到核心字段?别急!今天我们就来一次**“正则一网打尽”**,专为爬虫而生的表达式宝典,让你写起爬虫来如虎添翼!在当下数据驱动时代,网络数据是企业的“金矿”,而Python爬虫则是挖掘这金矿的“利器”!从电商价格到社交媒体评论,爬虫技术让数据采集变
python正则匹配11个数字_python正则表达式re.match()匹配多个字符方法的实现
小馬锅
python正则匹配11个数字
1.*表示匹配任意多个字符\d*表示匹配任意多个数字字符importretext="123h1elloworld"text1="123Helloworld456"text2="helloworld"res=re.match("\d*",text)res1=re.match("\d*",text1)res2=re.match("\d*",text2)print(res.group())print(r
C++正则表达式语法
Coding小公仔
c/c++ c++ 正则表达式 开发语言
在C++中,正则表达式是处理文本模式匹配和字符串操作的强大工具。C++11及以后的标准库提供了头文件,支持正则表达式的使用。下面是C++正则表达式的核心语法规则和用法:一、基本正则表达式语法1.普通字符直接匹配自身,例如:a匹配字符a。2.元字符(需转义)具有特殊含义的字符,需用反斜杠\转义(在C++字符串中需用双反斜杠\\)。.:匹配除换行符外的任意字符。^:匹配字符串的开头。$:匹配字符串的结
Shell 编程之正则表达式与文本处理器
目录一:正则表达式二:基础正则表达式1.基础正则表达式示例(1)查找特定字符(2)利用中括号“[]”来查找集合字符(3)查找行首“^”与行尾字符“$”(4)查找任意一个字符“.”与重复字符“*”(5)查找连续字符范围“{}”2.元字符总结3.扩展正则表达式二:文本处理器1.sed工具(1)输出符合条件的文本(p表示正常输出)(2)删除符合条件的文本(d)(3)替换符合条件的文本(4)迁移符合条件的
Python编程核心技能提升指南:从第2版到第3版
月末刀戈
本文还有配套的精品资源,点击获取简介:《Python核心编程中文版》详细介绍了Python的基础和高级编程主题,适合不同层次的学习者。覆盖了正则表达式的使用、网络编程基础、互联网客户端协议应用、多线程编程技巧,以及GUI编程等核心模块。本书通过丰富的实例和详细的解析,帮助读者掌握文本处理、网络通信、并发任务处理和桌面应用开发的关键技能,为深入学习和专业实践提供全面支持。1.Python编程基础1.
[特殊字符] 解释器模式:自定义语言的解析专家,让复杂语法变简单!
真实的菜
java 解释器模式 python 开发语言
解释器模式:自定义语言的解析专家,让复杂语法变简单!文章目录解释器模式:自定义语言的解析专家,让复杂语法变简单!一、为什么需要解释器模式️二、解释器模式的结构2.1UML类图2.2代码实现三、解释器模式的实际应用3.1正则表达式引擎:解释器模式的典型应用3.2SQL解析器:解释器模式的实际应用四、解释器模式在Java标准库中的应用4.1Java的正则表达式4.2Java的格式化4.3Java的表达
正则表达式*用法详解
小米人儿
我的博客 正则表达式
在使用ripgrep(或任何支持正则表达式的工具)时,*符号本身不能直接单独使用,因为它是一个量词,必须放在某个字符、字符组或子表达式之后,表示“重复前一个元素零次或多次”。以下是详细解释:1.*的正确用法a*:表示匹配字符"a"零次或多次(如:"","a","aa",…)。.*:表示匹配任意字符(.)零次或多次(即匹配任意长度的字符串,包括空字符串)。2.为什么不能直接用*?如果直接写*(没有前
jvm调优总结(从基本概念 到 深度优化)
oloz
java jvm jdk 虚拟机 应用服务器
JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
【Scala十六】Scala核心十:柯里化函数
bit1129
scala
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
HashMap
dalan_123
java
HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。
1、数据结构
在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据
Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
周凡杨
java 更新 swing JTextArea
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现
servlet或struts的Action处理ajax请求
g21121
servlet
其实处理ajax的请求非常简单,直接看代码就行了:
//如果用的是struts
//HttpServletResponse response = ServletActionContext.getResponse();
// 设置输出为文字流
response.setContentType("text/plain");
// 设置字符集
res
FineReport的公式编辑框的语法简介
老A不折腾
finereport 公式 总结
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。
简单的说下自己感觉的公式要注意的几个地方:
1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)
linux mysql 数据库乱码的解决办法
墙头上一根草
linux mysql 数据库乱码
linux 上mysql数据库区分大小写的配置
lower_case_table_names=1 1-不区分大小写 0-区分大小写
修改/etc/my.cnf 具体的修改内容如下:
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/va
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
aijuans
Spring 3
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
mysql 基准测试之sysbench
annan211
基准测试 mysql基准测试 MySQL测试 sysbench
1 执行如下命令,安装sysbench-0.5:
tar xzvf sysbench-0.5.tar.gz
cd sysbench-0.5
chmod +x autogen.sh
./autogen.sh
./configure --with-mysql --with-mysql-includes=/usr/local/mysql
sql的复杂查询使用案列与技巧
百合不是茶
oracle sql 函数 数据分页 合并查询
本片博客使用的数据库表是oracle中的scott用户表;
------------------- 自然连接查询
查询 smith 的上司(两种方法)
&
深入学习Thread类
bijian1013
java thread 多线程 java多线程
一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thr
JSON串转换成Map以及如何转换到对应的数据类型
bijian1013
java fastjson net.sf.json
在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study;
impor
【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架
bit1129
spring
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
在
【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中
【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析
bit1129
Mahout
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
nginx三种获取用户真实ip的方法
ronin47
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。
实例环境: 用户IP 120.22.11.11
java-判断二叉树是不是平衡
bylijinnan
java
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
诸葛不亮
PropertyUtils BeanUtils
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业
[金融与信息安全]最简单的数据结构最安全
comsci
数据结构
现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?
从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么
vi区段删除
Cwind
linux vi 区段删除
区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。
vi概述
引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。
vi区段删除步骤:
1. 在末行模式下使用:set nu显示行号
非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行
清除tomcat缓存的方法总结
dashuaifu
tomcat 缓存
用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。
出现这种现象的原因主要是tomcat缓存的原因。
解决办法如下:
在jsp文件头加上
<meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu
不要盲目的在项目中使用LESS CSS
dcj3sjt126com
Web less
如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》
不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。
比如它的引用功能
?
.rounded_corners{
[入门]更上一层楼
dcj3sjt126com
PHP yii2
更上一层楼
通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。
本章将介绍一些有助于更好使用 Yii 的资源:
Apache HttpClient使用详解
eksliang
httpclient http协议
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会
zxing二维码扫描功能
gundumw100
android zxing
经常要用到二维码扫描功能
现给出示例代码
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import an
纯HTML+CSS带说明的黄色导航菜单
ini
html Web html5 css hovertree
HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航
在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:
<!DOCTYPE html >
<html >
<head>
<title>HoverTree
fastjson初始化对性能的影响
kane_xie
fastjson 序列化
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。
网上的说法:
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
基于Mybatis封装的增删改查实现通用自动化sql
mengqingyu
DAO
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic
js控制input输入框的方法封装(数字,中文,字母,浮点数等)
qifeifei
javascript js
在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/
funct
java 计时器应用
tangqi609567707
java timer
mport java.util.TimerTask; import java.util.Calendar; public class MyTask extends TimerTask { private static final int
erlang输出调用栈信息
wudixiaotie
erlang
在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。
也可以用这个函数:erlang:get_s