正则表达式之基本概念
在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢?
正则表达式(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标记。
到此这篇关于正则表达式用法详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
你可能感兴趣的:(正则表达式用法详解)
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.为什么不能直接用*?如果直接写*(没有前
Unity 事件中心管理工具 并 一键跳转 注册/触发代码行
哈基咩咩
Unity 框架学习 unity 游戏引擎 c#
本人能力有限,如有不足还请斧正目录一.设计思路:工具源码二.修改思路匹配关键字修改匹配程序集修改配套事件中心源码初版演示:unity事件中心日志小工具讲解,再也不怕乱用事件中心了_哔哩哔哩_bilibili跳转功能演示视频:Unity事件中心管理小工具支持点击跳转脚本嘻嘻_哔哩哔哩_bilibili一.设计思路:1.通过过滤指定程序集和并使用正则表达式匹配事件中心的订阅和触发的关键字2.将匹配到的
数据结构与算法--Python栈 栈实现综合计算器和逆波兰计算器 前缀表达式 中缀表达式 后缀表达式 逆波兰表达式
storyfull
数据结构与算法 算法 python 栈 逆波兰表达式 逆波兰计算器
阅读目录栈实现综合计算器思路及Python实现思路Python实现模拟逆波兰计算器思路及Python实现思路Python实现正则表达式实现计算器栈实现综合计算器思路及Python实现思路先建立一个“数栈”用来压入数字,还有一个“符号栈”用来压入运算符,规定:减法从栈底向栈顶方法运算,乘除法优先级高于加减法具体操作过程:以“3+26-2”为例(1)数栈和符号栈皆为空,指针从左向右扫描表达式,数栈入栈
PHP基础3(错误处理,正则表达式,反序列化,操作mysql,cookie和session)
往日情怀酿作酒yx
php基础 php 开发语言
一.前言前面说了函数和流程控制那些,今天来说一些进阶一点的,错误处理之类的,上一节内容特别多,本章节内容将会少很多。二.PHP的错误处理很多时候,代码如果写的不太好,那么很容易报错。那么如果遇到了错误,我们应该想办法捕获到这个错误并记录下来,而且最好不要用户看到,不然太尴尬了,而且容易暴漏自己服务端的一些敏感信息,方便我们后续修改,并且尽量不要让整个程序因为一点小错误而崩溃。2.1配置项管理在ph
python xpath语法-Python Xpath语法
weixin_37988176
一、python数据提取xpath1.beautifulsoupxpath正则表达式2.xpath是一种在XML和HTML文档中查找信息的语言,可用来在XML和HTML中对元素进行遍历ChromeXPathHelper3.XPath语法(1)选取节点:使用路径表达式来选取文档中的节点nodename选取节点的所有子节点//div/如果是在最前面,代表从根节点选取,否则选择某节点下的某个节点一个/代
Python爬虫常用正则表达式分类与示例
Python爬虫常用正则表达式分类与示例一、基础匹配规则电话号码\b\d{3}-\d{8}\b或\b\d{4}-\d{7}\b示例:匹配010-86432100等格式。importretext="Phone:010-86432100,021-1234567"phones=re.findall(r'\b\d{3}-\d{8}\b|\b\d{4}-\d{7}\b',text)#结果:['010-864
javascript正则表达式大括号、中括号、小括号的作用以及应用场景
知福致福
前端学习笔记 正则表达式 javascript 开发语言
在JavaScript正则表达式中,大括号{}、中括号[]和小括号()都有不同的作用和应用场景。大括号{}在正则表达式中,大括号{}表示重复次数。以下是一些常见的应用场景:{n}:精确匹配出现的次数,例如\d{3}匹配三个连续的数字。{n,}:至少匹配n次,例如\d{4,}匹配至少四个连续的数字。{n,m}:匹配n到m次,例如\w{2,4}匹配出现两到四次字母、数字或下划线。中括号[]在正则表达式
linux,1.正则表达式, 2.sed工具, 3.awk
skyQAQLinux
正则表达式 linux 云计算 服务器
一.正则表达式1.egrep过滤工具(输出匹配行):筛选出文本中指定条件的行(1)以行为单位,逐行进行处理,默认只"输出"与表达式相匹配的"文本行"egrep:扩展正则grep:基本正则(2)语法格式1,文件(单引号)egrep[选项]'正则'文件格式2,命令命令|egrep[选项]'正则'(3)[选项]:(1)-i:忽略大小写(2)-v:去反(3)-c:统计匹配的行数(4)-q:无任何输出,一般
正则表达式中?的用法
张太行_
正则表达式 linux
在正则表达式中,?是一个量词(Quantifier),表示前面的元素匹配0次或1次(即“可选”)。以下是具体用法和示例:1.基本用法:匹配可选字符语法:X?表示X可以出现0次或1次。示例:正则colou?r:匹配"color"(u出现0次)匹配"colour"(u出现1次)。2.与其他符号结合分组可选:(abc)?匹配整个"abc"0次或1次(如""或"abc")。字符类可选:[ae]?匹配"a"
TikTok矩阵用法详解与实用策略
IPdodo跨境网络
矩阵
嘿,大家好!今天我们来聊聊一个目前在TikTok运营中非常热门的话题——TikTok矩阵!相信很多已经开始使用或想要尝试的朋友,对于如何高效运行自己的TikTok账号,尤其是如何利用矩阵玩法实现流量变现,都会有许多问题。接下来,我们就带大家深入理解TikTok矩阵的概念与实际操作策略。一、什么是TikTok矩阵?TikTok矩阵可以简单地理解为多个TikTok账号的共同运营。这些账号拥有不同的定位
python常用的正则表达式及作用
Python常用正则表达式及作用正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持:基本匹配模式匹配数字\d:匹配任意数字,等价于[0-9]\D:匹配任意非数字,等价于[^0-9]示例:r'\d+'匹配一个或多个连续数字匹配字母和数字\w:匹配字母、数字或下划线,等价于[a-zA-Z0-9_]\W:匹配非字母、数字、下划线,等价于[^a-zA-Z0-9_]匹配空白字符\s
Python 爬虫实践-抓取小说
迷路啦
Python Python 爬虫 小说
网络爬虫(WebSpider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。爬虫流程:1,先由urllib的request打开Url得到网页html文档2,浏览器打开网页源代码分析元素节点3,通过BeautifulSoup或正则表达式提取想要的数据4,存储数据到本地磁盘或数据库(抓取,分析,存储)下面以爬取笔趣网里面的小说为例:整个逻辑我这里倒着来讲述;下图是一篇小说
生成器函数概念与用法详解
teeeeeeemo
开发语言 前端 笔记 javascript
生成器函数(GeneratorFunction)是JavaScript中一种特殊的函数,它允许你逐步执行函数体,并在过程中多次返回(或“产出”)值,而不是一次性执行完毕。这种特性使得它非常适合处理异步操作、创建迭代器和处理大数据集等场景。核心概念语法标记使用function*声明(注意星号*的位置):function*myGenerator(){//函数体}yield关键字在函数内部用yield暂
Linux C/C++极速JSON库实战指南
隐身模式
C/C++ linux c语言 c++
LinuxC/C++最快的JSON库:使用详解目录LinuxC/C++最快的JSON库:使用详解一、JSON库选型对比(性能、易用性、功能)二、RapidJSON简介1.RapidJSON的优势2.官方资源三、编译与集成方式1.下载源码2.添加到项目中3.CMake集成四、基础用法详解1.JSON解析(DOM模式)2.构造JSON3.遍历数组4.修改JSON字段五、性能测试(与其他库对比)1.测试
JavaScript 手机号验证与倒计时功能实现
荷兰小香猪_01
javascript 开发语言 ecmascript
在现代Web应用中,手机号验证和验证码发送是常见的功能需求。本文将结合一个完整的示例,详细解析如何使用JavaScript实现这一功能,并深入探讨其中涉及的关键知识点。目录一、基本功能概述二、核心知识点解析1.正则表达式验证2.DOM操作3.定时器的使用4.变量作用域与闭包三、常见问题与解决方案1.倒计时无限循环问题2.多次点击导致多个定时器问题3.页面刷新后倒计时重置问题一、基本功能概述以及完整
《精通正则表达式》精华摘要
yuanyxh
正则表达式 前端 javascript
《精通正则表达式》的摘要,偏向JavaScript中的正则引擎去理解。元字符具有特殊含义的字符,表示某个规则,而不是其原来普通文本的含义。比如:.表示除换行符外的任意字符。\d表示数字(对于某些引擎来说,可能匹配除阿拉伯数字0-9外的其他数字)特殊元字符\s通常表示的是空格、制表符、换行符、回车符,部分实现可能还视为Unicode空白字符,而不仅仅是空格\p{category}表示匹配一个Unic
【正则表达式】正则表达式介绍
晴雨日记
Qt基础 C++ 笔记 正则表达式 c++
文章目录正则表达式应用在编程语言的应用表单验证文档中替换、查找符号说明元字符运算符优先级修饰符常用正则表达式引用文档正则表达式正则表达式(RegularExpression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。正则表达式是一种用于模式匹配和搜索文本的工具。正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取
ToolsSet之:正则表达式测试
BinField
ToolsSet Windows应用 windows microsoft
ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章:Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264ToolsSet中Text菜单下的RegexTest工具是一个简单的正则表达式测试工具,可以查看常用的正则表达式,也可以对正则表达式进
【Python】正则表达式中的`^`和`[]`
shengchao0920
python 正则表达式 数据库
一、正则表达式:符号^^在正则表达式中有两种常见的含义,具体取决于它的位置:1.在字符集[]的开头时,表示取反(negation)。例如:[^s]:匹配任何非空白字符。[^a-z]:匹配任何不在a-z范围内的字符。2.在字符集之外时,表示字符串的开始(anchor)。例如:^https:匹配以“https”开头的字符串。^\d:匹配以数字开头的字符串。总结:在[]内:取反。在[]外:字符串开始。需
【Python】Python办公自动化需要你了解什么?会什么?
目录专栏导读背景介绍1.核心语法基础2.常用内置模块二、办公自动化专用库1.文件处理三剑客2.Excel自动化3.Word文档处理4.PDF处理5.邮件自动化三、进阶技能要求1.正则表达式2.数据处理与分析3.定时任务调度4.GUI自动化四、典型办公自动化场景1.批量文件处理2.报表自动化3.邮件自动化4.数据采集与处理五、学习路径建议六、实用建议结尾专栏导读欢迎来到Python办公自动化专栏—P
Vue3 表单
AI老李
vue3 vue.js 前端 javascript vite vscode
关键要点Vue3表单通过v-model实现双向数据绑定,支持输入框、文本域和下拉菜单。表单验证包括必填字段、正则表达式和自定义方法,确保数据完整性。表单处理涉及数据获取和重置,适合用户交互和提交。表单绑定Vue3使用v-model指令将表单元素与数据绑定。例如:组件数据:data(){return{message:''}}v-model自动同步输入和数据,支持复选框、单选框和下拉菜单。表单验证验证
SHELL脚本(一)
ALLLEX89
linux bash
目录前言一、Shell脚本语言的基本结构1、Shell脚本的用途:2、Shell脚本基本结构:3、创建Shell脚本过程4、脚本注释规范5、第一个脚本6、执行脚本7、脚本错误二、Shell脚本语言的变量用法详解1、变量2、变量类型3、Shell中变量命名法则4、变量定义和引用5、环境变量6、只读变量7、位置变量8、退出状态码变量9、展开命令行9.1展开命令执行顺序9.2防止扩展9.3加引号来防止扩
Qt编程: 正则表达式分析
倔强老吕
QT开发 qt 正则表达式
Qt提供了两种正则表达式实现:QRegExp(Qt4-5)和QRegularExpression(Qt5+推荐)。本文将重点介绍Qt5推荐的QRegularExpression类及其完整用法。QRegularExpression基础1.1基本使用#include//构造正则表达式QRegularExpressionre("apattern");//检查是否有效if(!re.isValid()){q
DataWhale-零基础络网爬虫技术(二er数据的解析与提取)
我怎么又饿了呀
Python Datawhale 爬虫 算法
课程链接先给各位↓↓↓(点击即可食用.QAQDatawhale-学用AI,从此开始一、数据的解析与提取数据提取的几种方式:re解析bs4解析xpath解析1.1正则表达式(ReuglarExperssion)RE是一种用于字符串匹配的规则描述方式。它通过特定的组合字符来定义字符串的模式,从而实现对字符串的搜索、匹配、替换等操作。Python也支持同样re的用法,需要引入模块importre。使用场
golang 定义一个空切片_go语言切片用法详解
weixin_39764212
golang 定义一个空切片
1.定义在Go语言中切片是一种数据结构,很便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数append来实现的。这个函数可以快速且高效地增长切片。还可以通过对切片再次切片来缩小一个切片的大小。因为切片的底层内存也是在连续块中分配的,所以切片还能获得在访问速度以及垃圾回收优化等方面的好处。切片在Go语言的源码定义如下所示,由于其数据结构中有
jquery获取本机内网IP
ipipv4
在jquery中获取本机内网IP地址可以通过WebRTCAPI来收集本地候选IP地址,并通过正则表达式筛选出内网IP一:实现思路WebRTC获取IP:通过创建RTCPeerConnection实例,浏览器会自动收集本地网络接口的IP地址作为ICE候选。筛选内网IP:从收集到的候选IP中过滤出符合IP地址二:浏览器支持需在支持WebRTC的现代浏览器(如Chrome、Firefox)中运行三:代码实
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