当前位置: 首页 > 编程日记 > 正文

Php中正则小结(一)

一.概念

语法模式类似perl.表达式必须用分隔符闭合,比如一个正斜杠(/).

分隔符可以是任意非字母非数字,除反斜杠(\)和空字节之外的非空白ascii字符

如果分隔符 在表达式中使用,需要使用反斜线进行转义

二.组成

元字符

一个正则表达式基本组成

/原子和元字符/模式修正符              /代表定界符的一个

正则表达式的威力在于其能够在模式中包含选择和循环。它们通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。

根据在方括号的内部还是外部分为两种。

1.方括号之外的元字符

元字符(符号)

说明

\

一般用于转义字符

^

断言目标的开始位置(或在多行模式下是行首)

$

目标的结束位置(活在多行模式下行尾)

.

匹配除换行符外任何字符(默认时)

[,]

开始,结束字符类定义

|

开始一个可选分支

( ,)

子组的开始,结尾标记

?

作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性

*

量词,0 次或多次匹配

+

量词,1 次或多次匹配

{ ,}

自定义量词开始标记,结束标记

2.模式中方括号内的部分称为“字符类”

元字符

说明

\

转义字符

^

仅在作为第一个字符时,表明字符类取反

-

标记字符范围

元字符用法说明举例

1.转义(反斜线)

\后紧跟着一个非字母数字字符,则取消该字符可能具有的任何特殊含义。此种适用于字符类之中或之外。

对于非数字字母的字符,总是需要其进行原文匹配时候在它前面加一个反斜线,来代表它代表自己。

匹配 “*” 时,由于其有特殊含义,所以用 “\*”取消掉了其特殊含义

匹配”.”用”\.”

匹配”\” 用”\\”

但要注意:

反斜线在单引号字符串和双引号字符串中都有特殊含义,因此要匹配一个反斜线,模式中必须写”\\\\”或’\\\’

2.反斜线第二种用途提供了一种对非打印字符进行可见编码的控制手段。除了二进制的0会终结一个模式外,并不会严格的限制非打印字符(自身)的出现,但是当一个模式以文本编辑器的方式编辑准备的时候,使用下面的转义序列相比比使用二进制字符会更容易。

符号

说明

\a

响铃字符(十六进制 07)

\cx

"control-x",x 是任意字符

\e

转义 (十六进制 1B)

\f

换页 (十六进制 0C)

\n

换行 (十六进制 0A)

\p{xx} (p小写)

一个符合 xx 属性的字符

\P{xx} (p大写)

一个不符合 xx 属性的字符

\r

回车 (十六进制 0D)

\t

水平制表符 (十六进制 09)

\xhh

hh十六进制编码的字符

\ddd

ddd八进制编码的字符,或者后向引用

\040

空格的另外一种用法

\40

当提供了少于40个子组时也认为是空格。

\7

始终是后向引用

\11

可能是后向引用,也可能是制表符

\011

总是一个制表符

\0113

一个制表符紧跟着一个3(因为每次最多只读取3个8进制位

\113

八进制113代表的字符

\377

8进制377是10进制255, 因此代表一个全1的字符

\81

一个后向引用或者一个二进制 0 紧跟着两个数字 8 和 1(因为8不是8进制有效数字)

3.反斜线第三种用法,描述特定的字符类

符号

说明

\d

任意十进制数字

\D

任意非十进制数字

\h

任意水平空白字符(php 5.2.4)

\H

任意非水平空白字符(php 5.2.4)

\s

任意空白字符

\S

任意空白字符

\v

任意垂直空白字符(since PHP 5.2.4)

\V

任意非垂直空白字符(since PHP 5.2.4)

\w

任意单词字符

\W

任意非单词字符

上面每一对转义序列都代表了完整字符集中两个不相交的部分, 任意字符一定会匹配其中一个,同时一定不会匹配另外一个。

第四种用法 简单的断言

\b

单词边界 注意在字符类中是退格

\B

非单词边界

\A

目标的开始位置(独立于多行模式)

\Z

目标的结束位置或结束处的换行符(独立于多行模式)

\z

目标的结束位置(独立于多行模式)

\G

在目标中首次匹配位置

\A,\Z,\z断言不同于传统的^$

因为他们永远匹配目标字符串的开始和结尾,而不会受模式修饰符的限制

\Z和 \z之间的不同在于当字符串结束字符时换行符时 \Z 会将其看做字符串结尾匹配, 而 \z 只匹配字符串结尾。

代码1

$p='#\A[a-z]{3}#m';
$str='abc
defg
hijkl';
preg_match_all($p,$str,$all);
print_r($all);

发现后面加不加模式修正符m结果都一样

只匹配到abc

而代码2

$p='#^[a-z]{3}#m';
$str='abc
defg
hijkl';
preg_match_all($p,$str,$all);
print_r($all);

不加m只匹配abc

加上之后匹配了abc,def,hij

果真,\A不受模式修正符的影响

同理可比较$\Z

\Z\z

代码3

$p='#[a-z]\Z#';$str="a\n";preg_match_all($p,$str,$all);print_r($all);

模式修正为\E时匹配到a

当模式修正为\e时,由于它只匹配到字符的结束,不认换行符,所以匹配不到任何东西

G 断言在指定了$offset 参数的 preg_match()() 调用中, 仅在当前匹配位置在匹配开始点的时候才是成功的

当 $offset 的值不为 0 的时候, 它与 \A 是不同的。

参见php手册

自 PHP 4.3.3开始, \Q和 \E 可以用于在模式中忽略正则表达式元字符.

即把有特殊含义的字符放在\Q与\E之间

如代码4

$p='#\w+\Q.$.\E$#';
$str="a.$.";
preg_match_all($p,$str,$all);
print_r($all);

匹配到 a.$.

自 PHP 5.2.4 开始。 \K 可以用于重置匹配。 比如, foot\Kbar 匹配”footbar”。 但是得到的匹配结果是 ”bar”。但是, \K 的使用不会干预到子组内的内容, 比如 (foot)\Kbar 匹配 ”footbar”,第一个子组内的结果仍然会是 ”foo”。译注: \K 放在子组和子组外面的效果是一样的。

\p{Lu}匹配大写字母

句点

在字符类外部

\C可以被用于匹配单字节, 也就是说在UTF-8模式下,句点可以匹配多字节字符

Character classes

alnum

字母和数字

alpha

字母

ascii

0 - 127的ascii字符

blank

空格和水平制表符

cntrl

控制字符

digit

十进制数(same as \d)

graph

打印字符, 不包括空格

lower

小写字母

print

打印字符,包含空格

punct

打印字符, 不包括字母和数字

space

空白字符 (比\s多垂直制表符)

upper

大写字母

word

单词字符(same as \w)

xdigit

十六进制数字

比如'#[[:upper:]]#'匹配大写字母

'#[[:alpha:]]#'   匹配字母

可选路径|

竖线字符用于分离模式中的可选路径。 比如模式gilbert|Sullivan匹配 ”gilbert” 或者 ”sullivan”。 竖线可以在模式中出现任意多个,并且允许有空的可选路径(匹配空字符串)。 匹配的处理从左到右尝试每一个可选路径,并且使用第一个成功匹配的。 如果可选路径在子组(下面定义)中, 则”成功匹配”表示同时匹配了子模式中的分支以及主模式中的其他部分。

代码5

$p='#p(hp|ython|erl)#';
$str="php python perl";
preg_match_all($p,$str,$all);
print_r($all);

子组(子模式)

子组通过圆括号分割界定,并且它们可以嵌套,主要有以下两种用法与功能

1.将可选分支局部化。比如

模式 p(hp|ython|erl) 匹配php,python,perl中的一个

2.将子组设定为捕获子组

整个模式匹配后, 左括号从左至右出现的次序就是对应子组的下标(从 1 开始), 可以通过这些下标数字来获取捕获子模式匹配结果。

代码6

$p='#(\d)#';
$str="abc123";
$r=preg_replace($p,'<font color=red>\1</font>',$str);
echo $r;

但当只想分组而又不想捕获时

在子组定义的左括号后面紧跟字符串 ”?:” 会使得该子组不被单独捕获, 并且不会对其后子组序号的计算产生影响

代码7:匹配数字 把数字改为红色的

$p='#.*(?:\d).*([a-z])#U';
$str="3df5g";
$r=preg_replace($p,'<font color=red>\1</font>',$str);
echo $r;

如果匹配数字的模式不加?:

那么\1代表的就是匹配就是数字,加上后只是分组不捕获了,\1就代表捕获的字母了

为了方便简写,如果需要在非捕获子组开始位置设置选项, 选项字母可以位于 ? 和 : 之间,比如:

(?i:saturday|Sunday)

(?:(?i)saturday|Sunday)

其中i是模式修正符,忽略大小写

上面两种写法实际上是相同的模式。因为可选分支会从左到右尝试每个分支, 并且选项没有在子模式结束前被重置, 并且由于选项的设置会穿透对后面的其他分支产生影响,因此, 上面的模式都会匹配 ”SUNDAY” 以及 ”Saturday”。

在 PHP 4.3.3 中,可以对子组使用 (?P<name>pattern) 的语法进行命名。 这个子模式将会在匹配结果中同时以其名称和顺序(数字下标)出现, PHP 5.2.2中又增加了两种味子组命名的语法: (?<name>pattern) 和 (?’name’pattern)。不能双引号

代码如下8:

$p="#.*(?<alpha>[a-z]{3})(?'digit'\d{3}).*#";
$str="abc123111def111g";
preg_match_all($p,$str,$arr);
print_r($arr);

结果:

有时需要多个匹配可以在一个正则表达式中选用子组。 为了让多个子组可以共用一个后向引用数字的问题, (?\语法允许复制数字。 考虑下面的正则表达式匹配Sunday:

(?:(Sat)ur|(Sun))day

这里当后向引用 1 空时Sun 存储在后向引用 2 中. 当后向引用 2 不存在的时候 Sat 存储在后向引用 1中。 使用 (?|修改模式来修复这个问题:

代码9:

$p='#(?:(sat)ur|(sun))day#';
$str="sunday saturday";
preg_match_all($p,$str,$arr);
print_r($arr);

结果:

(?|(Sat)ur|(Sun))day

使用这个模式, Sun和Sat都会被存储到后向引用1中。

在看这个模式前先看以2个下代码

代码10-1

$p='#(a|b)\d#';
$str="b2a1";
preg_match_all($p,$str,$arr);
print_r($arr);

结果是:Array

([0] => Array([0] => b2[1] => a1)[1] => Array([0] => b[1] => a))
代码10-2
$p='#((a)|b)\d#';
$str="b2a1";
preg_match_all($p,$str,$arr);
print_r($arr);

结果:

Array
([0] => Array([0] => b2[1] => a1)[1] => Array([0] => b[1] => a)[2] => Array([0] => [1] => a))
对10-2代码:
第一次完整匹配到的内容是b2,所以包括匹配内容b的括号即为其第一个子模式是即为b,第二个子模式由于(a)没有匹配,所以为空
第二次完整匹配到a1,其第一个子模式为a,第二次的由于((a)|b)是外层大括号里包含的
代码10-3:
$p='#((a)|(b))\d#';
$str="b2a1";
preg_match_all($p,$str,$arr);
print_r($arr);

 结果:
Array
([0] => Array([0] => b2[1] => a1)[1] => Array([0] => b[1] => a)[2] => Array([0] => [1] => a)[3] => Array([0] => b[1] => ))

代码10-4:

$p='#(?:(a)|(b))\d#';
$str="b2a1";
preg_match_all($p,$str,$arr);
print_r($arr);
结果:
Array ([0] => Array([0] => b2[1] => a1)[1] => Array([0] => [1] => a)[2] => Array([0] => b[1] => ))

 

代码10:

$p='#(?|(sat)ur|(sun))day#';
$str="sunday saturday";
preg_match_all($p,$str,$arr);
print_r($arr);

结果

 后向引用

如果紧跟反斜线的数字小于 10, 它总是一个后向引用。模式中的捕获数要大于等于后向引用的个数

后向引用会直接匹配被引用捕获组在目标字符串中实际捕获到的内容, 而不是匹配子组模式的内容

(sens|respons)e and \1ibility将会匹配 ”sense and sensibility” 和 ”response and responsibility”, 而不会匹配 ”sense and responsibility”

代码11

$p='#(sens|respons)e and \1ibility#';
$str="sense and sensibility response and responsibility  sense and responsibility";
preg_match_all($p,$str,$arr);
print_r($arr);

结果

ab(?i)c匹配abCabc

(?i)+原子

表示(?i)后的原子不区分大小写

如果在后向引用时被强制进行了大小写敏感匹配

((?i)abc)\s+\1

匹配 abc abc 

ABC ABC

AbC AbC

只要两个一样不分大小写

但不匹配 ABC aBC

这里其实要考虑的是后向引用期望得到的内容是和那个被引用的捕获子组得到的内容是完全一致的

代码12:

$p='#((?i)abc)\s+\1#';
$str="abc abc |ABC ABC  |AbC AbC |abc Abc ";
preg_match_all($p,$str,$arr);
print_r($arr);

结果

可能会有超过一个的后向引用引用相同的子组。 一个子组可能并不会真正的用于特定的匹配,此时, 任何对这个子组的后向引用也都会失败。

先看以下代码13

$p='#(a|(bc))#';
$str="abc ";
preg_match_all($p,$str,$arr);
print_r($arr);

完整匹配了2次

[0][0]是第一次完整的匹配

[1][0]是第一次匹配的第一个子模式

[2][0]是第一次匹配的第二个子模式

[0][1]第二次完整匹配

[1][1]第二次匹配的第一个子模式

[2][1]是第二次匹配的第二个子模式

从上面可以发现对于模式

(a|(bc))

最外面的括号是第一个匹配子模式

里面的括号里的是第二个子模式

所以对于以下代码14:

$p='#(a|(bc))\2#';
$str="aabcbc";
preg_match_all($p,$str,$arr);
print_r($arr);

结果

当第一匹配a时,就没有第二子模式了

就无从\2谈起

所以第一次完整匹配中必须得有让第二个子模式存在的机会即里面的括号里的内容必须被匹配到,所以必须得有bc才能有匹配。

因为可能会有多达 99 个后向引用, 所有紧跟反斜线后的数字都可能是一个潜在的后向引用计数。 如果模式在后向引用之后紧接着还是一个数值字符, 那么必须使用一些分隔符用于终结后向引用语法。

以下代码15为例:

$p='#([a-z]{3})\1 5#x';
$str="aaaaaa5";
preg_match_all($p,$str,$arr);
print_r($arr);

模式后向引用\1后紧跟数字的话就像以上代码 就会误认为第15个引用

我们空下一格,然后在模式修正里忽略模式里的空格就能成功匹配

如果一个后向引用出现在它所引用的子组内部, 它的匹配就会失败

(a\1) 就不会得到任何匹配

而这种引用可以用于内部的子模式重复

(a|b\1)会匹配 ”a”但不会匹配b( 因为子组内部有一个可选路径,可选路径中有一条路能够完成匹配,在匹配完成后, 后向引用就能够引用到内容了)。

代码16:

$p='#(a|b\1)+#';
$str="abba";
preg_match_all($p,$str,$arr);
print_r($arr);

结果

在每次子模式的迭代过程中, 后向引用匹配上一次迭代时这个子组匹配到的字符串。为了做这种工作, 模式必须满足这样一个条件,模式在第一次迭代的时候, 必须能够保证不需要匹配后向引用。 这种条件可以像上面的例子用可选路径来实现,也可以通过使用最小值为 0 的量词修饰后向引用的方式来完成。

在 PHP 5.2.2之后, \g转义序列可以用于子模式的绝对和相对引用。 这个转义序列必须紧跟一个无符号数字或一个负数, 可以选择性的使用括号对数字进行包裹。 序列\1, \g1,\g{1} 之间是同义词关系。 这种用法可以消除使用反斜线紧跟数值描述反向引用时候产生的歧义。 这种转义序列有利于区分后向引用和八进制数字字符, 也使得后向引用后面紧跟一个原文匹配数字变的更明了,比如 \g{2}1。

代码17:

$p='#([a-z]{2})\g{1}5#';
$str="abab5";
preg_match_all($p,$str,$arr);
print_r($arr);

可与代码15对比

\g 转义序列紧跟一个负数代表一个相对的后向引用。比如: (foo)(bar)\g{-1} 可以匹配字符串 ”foobarbar”, (foo)(bar)\g{-2} 可以匹配 ”foobarfoo”。 这在长的模式中作为一个可选方案, 用来保持对之前一个特定子组的引用的子组序号的追踪。

代码18

$p='#(foo)(bar)\g{-1}#';
$p1='#(foo)(bar)\g{-2}#';
$str="foobarbar";
$str1="foobarfoo";
preg_match_all($p,$str,$arr);
preg_match_all($p1,$str1,$arr1);
print_r($arr);
print_r($arr1);

结果:

后向引用也支持使用子组名称的语法方式描述, 比如 (?P=name) 或者 PHP 5.2.2 开始可以实用\k<name> 或 \k’name’。 另外在 PHP 5.2.4 中加入了对\k{name} 和 \g{name} 的支持。

代码19:

$p="#(?'alpha'[a-z]{2})(?<digt>[0-9]{3})\k<digt>(?P=alpha)#";
$str="aa123123aa";
preg_match_all($p,$str,$arr);
print_r($arr);

结果:

可与代码8比较着看

注意标红的

Alpha前一个有引号,后一个没有

P大写

参考资料:<php手册>

未完待续....

转载于:https://www.cnblogs.com/HKUI/p/3205027.html

相关文章:

在C#.net中如何操作XML

在C#.net中如何操作XML需要添加的命名空间&#xff1a;using System.Xml; 定义几个公共对象&#xff1a;XmlDocument xmldoc ;XmlNode xmlnode ;XmlElement xmlelem ; 1&#xff0c;创建到服务器同名目录下的xml文件&#xff1a; 方法一&#xff1a;xmldoc new XmlDocument…

精彩碰撞!神经网络和传统滤波竟有这火花?

作者 | 凌霄出品 | AI大本营&#xff08;ID&#xff1a;rgznai100&#xff09;惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展&#xff0c;该装置进入了许多新的应用领域&#xff0c;从无人驾驶飞机到人体运动跟踪。在捷联式 …

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...

2017年上半年信息系统项目管理师上午试题分析与答案&#xff08;试题16-20题&#xff09; 16.信息系统的安全威胁分成七类&#xff0c;其中不包括&#xff08;&#xff09;A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)

(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…

CSDN送会员?免费的!都来领!

距离春节还有不到一个月你准备好给家人的春节礼物了吗&#xff1f;疫情下&#xff0c;为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日&#xff0c;人人都可免费领会员&#xff01;助你提前实现CSDN会员卡自由&#xff01;奖品多多&#xff0c;不仅有CSDN月卡会…

BGP相邻体之间磋商的过程

一.BGP的几个概念 空闲&#xff08;IDLE&#xff09; 等待由管理员发起的START事件 正确&#xff0c;到连接状态 错误&#xff0c;回到空闲状态 连接状态&#xff08;Connect&#xff09; 等待TCP的连接是否成功&#xff0c;以期望获得一个对等体 正确&#xff0c;到开放发送Op…

去除ios input部分默认样式

input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)

2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API&#xff0c;但是怎么使用呢&#xff0c;下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面&#xff0c;ImageX.DeletePages 方法允许开发人员…

用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源&#xff0c;发布了「2020 新一线城市居住报告」&#xff1a;图1而在这个报告中有几张数据可视化作品还是比较可圈可点的&#xff0c;作为&#xff08;在模仿中精进数据可视化&…

Python 代码规范

前言 Python 学习之旅&#xff0c;先来看看 Python 的代码规范&#xff0c;让自己先有个意识&#xff0c;而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案

本人所了解有两种方案&#xff0c;可能还有其的方式&#xff0c;希望大家多多讨论&#xff01; 基本思路&#xff1a;1. 域名支持泛解析&#xff0c;即是指&#xff1a;把A记录 *.域名.com 解析到服务器IP&#xff0c;服务器IIS中做绑定&#xff0c;绑定时主机头为空;2. 为了…

又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用

整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;1月13日晚间&#xff0c;针对百度公开“员工工作状态预测”专利惹争议一事&#xff0c;百度在官方微博火速回应称&#xff0c;这是一个管理上的“人岗匹配”衡量方法&#xff0…

僵死进程和僵尸进程

一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据结构&#xff08;系统调用exit&#xff0c;它的作用是使进程退出&#xff0c;但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路&#xff1a; SBlct&#xff1b; 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触

讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法&#xff0c;一种是用字符串累加的方法&#xff0c;另一种是使用xml文档生成的方法。字符串累加的方法也比较简单&#xff0c;我也就不多说了&#xff0c;这里着重说一下生成XmlDocument的方法&#xff0c;包括各种…

2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉&#xff01;向来以严格审查闻名的ACM Fellows&#xff0c;今年居然共选择了 95 名科学家&#xff0c;其中还有 13 位华人&#xff0c;来看看都是哪些大佬吧&#xff01;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;C…

Mybatis调用Oracle的存储过程

如何使用Mybaits调用数据库中的存储过程&#xff0c;下面以Oracle数据库的为例&#xff1a;1&#xff0e;在数据库中创建以下的存储过程&#xff1a;2&#xff0e;编写SQL映射文件WxclDAO.xml&#xff1a;<select id"selectWxcl2" parameterType"java.util.M…

JavaScript - 数据类型和变量

计算机顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然地可以处理各种数值。但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数据&#xff0c;不同的数据&#xff0c;需要定义不同…

用Socket发邮件的代码(可以群发)

qunFa.aspx文件的代码&#xff1a; <%... Page language"c#" Codebehind"qunFa.aspx.cs" AutoEventWireup"false" Inherits"liuwei.hanmail.qunFa" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu…

rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系

如果插件B需要引用插件A中的jar 通常需要以下几步&#xff1a; 1.插件B要依赖插件A 2.在插件B的build path中添加插件A的jar包 3.插件A的runtime导出插件B中使用jar的package

微软Cortana全面升级神经网络语音,效果堪比真人发音

近日&#xff0c;微软在全球范围内对Cortana进行了神经网络语音全面升级&#xff0c;升级后的Cortana更加自然流畅&#xff0c;语音效果堪比真人发音。 以下是Cortana不同国家、不同语言升级前后语音效果对比&#xff1a; Cortana音频 此次升级利用了深度神经网络技术&#…

Spring《五》集合的注入方式

List、Set、Map、Properties 1、List <property name"msg"> <list> <value>gf</value> <value>gd</value> <value>HelloWorld</value> </list> </property> 2、Set <property name"msg"&g…

虚方法的调用是怎么实现的(单继承VS多继承)

我们知道通过一个指向之类的父类指针可以调用子类的虚方法&#xff0c;因为子类的方法会覆盖父类同样的方法&#xff0c;通过这个指针可以找到对象实例的地址&#xff0c;通过实例的地址可以找到指向对应方法表的指针&#xff0c;而通过这个方法的名字就可以确定这个方法在方法…

asp.net 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在&#xff0e;在这里使用一个cache存放已经登陆的用户名&#xff0e;但是还有一个问题就是要知道用户是什么时候离开系统的呢&#xff1f;这就要定期清除cache中的内…

Python+Dash快速web应用开发——基础概念篇

作者&#xff1a;费弗里来源&#xff1a;Python大数据分析❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介这是我的新系列教程「PythonDash快速web应用开发」的第一期&#xff0c;我们都清楚学习一个新工具需要一定的动力&#xff0c…

POJ 1273 Drainage Ditches

网络流。题意非常easy。给出单向边&#xff0c;容量。找最大流。注意重边要加起来。g[u][v].cc; 第一次写网络流。也是第一个网络流的题。看了两天&#xff0c;理解了之后就唰唰唰的写出来了。 大概可能是EK吧。ORZ都不知道用的啥算法。仅仅是感觉要这样写。由于重边还WA了。改…

利用GridView显示主细表并一次编辑明细表所有数据的例子

全部代码如下&#xff1a; ASPX&#xff1a; <% Page Language"C#"ValidateRequest"false"AutoEventWireup"true"EnableViewState"false"CodeFile"Default2.aspx.cs"Inherits"Default2"%><!DOCTYPE ht…

TensorFlow搭建垃圾分类系统大师(免费领源码)

人工智能是一个多学科交叉融合的领域&#xff0c;其包含机器学习、计算机视觉、自然语言处理等多个子领域&#xff0c;其中计算机视觉是应用最广泛的领域之一。大多数人熟悉的手机和相机中的人脸识别功能&#xff0c;就是人工智能子领域——计算机视觉的体现。计算机视觉中的图…

for的循环遍体

以下讲解for的变体形式&#xff0c;对于一般的for语句常规这里不再赘述关于for变体 主要是用来实现一些特殊需求&#xff1a;//注意不要使for成为死循环 for(int i0;i!5;1){//DOLOOP }1&#xff09;假如&#xff0c;我们需要对循环变量i在循环外部使用&#xff0c;并调用循环变…