他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益。
入门简介
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。
基本语法
在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
正则表达式的形式一般如下:
/love/
其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
下面,就让我们来看一下正则表达式元字符的具体应用。
/fo+/
因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
/eg*/
因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
/Wil?/
因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,
/jim/
上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
/\s+/
上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
/\d000/
如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。
除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。
较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说:
/^hell/
因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。
/ar$/
因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。
/\bbom/
因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
/man\b/
因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
/[A-Z]/
上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/
上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/
上述正则表达式将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/
上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。
关于侣行,我觉得270和梁红最遗憾的事
无意中看到一个关于侣行的小视频被深深的吸引了,那是一种说走就走的勇气,瞬间让我这个幻想旅行狗成了他们的粉丝,在很长一段时间里,我抛去了电视剧,抛去了综艺节目,每天面带口水的搜索他们的各种视频。然后带着羡慕妒忌恨的心情,写了一些文字。
是不是很多人都像我一样,期初都被张昕宇梁红夫妻俩朴素的打扮给欺骗了,以为就是一对穷游背包客对不对?两夫妻赚了点小钱,有着共同的目标跟爱好,然后就出发了,然并卵,人家是正儿八经的土豪!!!啪啪啪啪啪啪的打肿了我本来就不小的大脸盘子,当我得知他们的《侣行》,打底花了:一个亿!!!时,我开始从羡慕变成了嫉妒了,嫉妒他们有那么多钱可以花在旅行上,而我这只幻想狗,还曾经当心他们旅行途中艰苦。。。
2008年,我们做了一个10年的计划,用5年来准备,用5年来行走世界。
2018年,是这个10年计划的最后一年。这10年,我们走了全世界快200个国家,也付出了许多代价,身体的、心理的、财力的,其中也包括大家说的这1亿元。
这值得吗?有意义吗?后悔吗?未来干什么?
270和梁红说:”我们决定把赚的这些钱,换成我们的经历和记忆。我们就想做一回自己,过一回我们想过的生活。”这句话,是我觉得最牛的一句,这是对生命最好的尊重方式,很多人都觉得应该努力赚钱过更好的生活,那什么是更好的生活?跟爱的一起,想去哪里去哪里,带着青春时的梦想,带着那些稚气的承诺,一件一件的去实现,难道不是最幸福的事吗?
幻想一下如果我是他们,我应该走到每一处,必须给自己埋一个hope时间胶囊,写下脚下的故事,写上当时的心情,埋给以后的自己。等老了,打开hope,每天都有年轻时写给自己的故事,那或许是更美好的一种人生吧。
没有一种生活会比另一种生活更好,也没有一种人生的选择,会比另一种选择更高尚。过好当下,过好自己。。。
第1集 李承鄞前往西境遇刺 小枫逃跑被捉回
天通二十三年,为了维护西境与中原的和亲传统,西州王曲文成与和亲公主明远向豊朝提出了和亲请求,而此时的豊朝也是政局动荡,太子李承稷因揭发科举舞弊一案与皇帝起了冲突,因此受到了皇帝的惩罚,皇帝还命李承稷远赴西州求亲,然后前往西州安护府,未建军功不得回朝。
李承稷无可奈何,只能遵从父皇命令,在临行之际,五皇子李承鄞前来请命,希望与哥哥一道前往西境。豊朝皇后张玫娘见状赶紧替李承鄞辩护,二皇子宣德王李承邺也在一边打圆场,称李承鄞虽然情深义重,但西州环境艰苦,五弟自幼锦衣玉食,怕是难以适应。皇帝冷冷开口,询问李承鄞是否拿定了主意。李承鄞已经做好准备,要去边境历练一番,皇上也不再违拗其心意,随即答应。
此时,西凉国的九公主小枫正在英姿飒爽地进行赛马,小枫不仅生得美貌无双,更是天真无邪,机灵可爱,十足的浪漫少女模样。小枫无意中让马儿受惊,险些从马背上摔下来,多亏她的师父顾剑及时出手相救,这才没有大碍。小枫回到王宫,这才惊讶地得知,自己不日就要前往中原和亲。小枫自然万般不愿,但曲文成主意已定。
小枫迫于无奈,只好向顾剑求助,希望他带着自己远走高飞,但是,顾剑一口回绝了小枫的请求,这让她伤心不已,同时更加坚定信念,誓死不嫁中原皇子。另一边,西州王曲文成的侧妃,也就是豊朝的和亲公主明远得到了消息,知道李承稷和李承鄞正在前往西州焉支城的路上,她将此事告知柴牧。柴牧是江湖组织潜龙使首领,他奉明远的请求,带人去接应两位皇子。
李承稷和李承鄞行至郊外,突然遇到刺客行刺,李承鄞力挽狂澜,带着哥哥狂奔逃离,但李承稷还是死在了丹蚩人的的刀下。西州王后恨透了明远,认为是这个妖妇蛊惑曲文成,提出了和亲的主意,才让小枫不得不远赴中原,于是,王后命心腹杀手阿渡前去刺杀明远,但是并没有成功,被顾剑及时发现并阻拦了。顾剑左思右想,决定带着小枫逃走,这让小枫喜出望外。
豊朝骁骑大将军裴况之子裴照来到郊外,愕然发现这里尸横遍野,他大惊失色,赶紧命人封锁此地,并将消息报告给驻扎在西境安护府的豊朝高相长子高显。小枫按照约定,来到沙漠等待顾剑,谁知却等来了血迹斑斑的李承鄞。小枫心地善良,决定救李承鄞一命,为了安全起见,她趁着李承鄞晕倒,将其捆在树上。李承鄞苏醒后,小枫便询问他的身份,但李承鄞不肯言明。另一边,顾剑没有找到小枫,也是心急如焚。
李承鄞谎称自己是豊朝的商人,不幸遇到强盗,才沦落至此。小枫并未起疑,全然相信。这时,两人忽然听见一阵聒噪,探出头去,看见丹蚩王之孙伊莫延带着许多俘虏和财物经过此地,正在与高显汇合,那些俘虏和财物,正是李承稷兄弟随身所带。李承鄞看得眼红,他认为眼前的人就是杀害大哥的凶手。
伊莫延与高显十分相熟,原来,这二人早就暗中勾结,约定由伊莫延一年三次掳掠边境村落,只要西境安护府一出兵,伊莫延便撤退,这么一来,伊莫延得到了财物,高显则得到了军功。不过,高显这次忽然提出要和伊莫延终止合作,这让伊莫延不得不猜想,豊朝出了大事。高显离开后,伊莫延忽然察觉不远处有人,小枫让李承鄞别出头,独自一人跑了出去。原来,伊莫延是小枫的表哥,他见表妹在此,才放下了戒心。小枫返回藏身之处,发现李承鄞踪影全无,只留下一张布条,可小枫只认得其中三个字。
李承鄞独自一人流落荒野,多亏遇到柴牧,才得以去往安全地带。小枫漫无目的漂泊,半路遇到顾剑,二人刚要离开是非之地,曲文成派来的追兵将他们团团围住,小枫迫不得已,只好答应回去。豊朝皇帝很快得知自己两位皇子被丹蚩人刺杀的事情,他暴跳如雷,决定为李承稷报仇雪恨,但他并不知道,这一切都是李承邺安排的。
李承鄞在柴牧的帮助下来到西州安护府,见到了道貌岸然的高显。高显做出一副关心的模样,但李承鄞早就见过高显与伊莫延勾结的一幕,心中多了戒备。小枫回到王宫,曲文成作势要打,王后赶紧护着宝贝女儿,曲文成气得软禁小枫,不准她再逃走。这时,女使传来消息,豊朝和朔博两国使臣正在议政殿向小枫提亲。
第2集 李承鄞得知家族仇恨 小枫再遇李承鄞
豊朝皇室宗亲忠王得知丹蚩人胆大包天,害了太子性命,便向皇上进言,要给丹蚩人好看。豊朝右相高于明分析利害,认为丹蚩人这么做必有缘由。皇帝正在气头上,命令李承邺即刻带兵去西境安护府,彻查太子被刺一事,再让李承鄞带使团去西州,说什么也要求娶到西州公主。
此时,李承鄞在高显的陪伴下,已经来到曲文成面前求亲,奉上和亲国书。曲文成看了看国书,频频点头,他也希望通过和亲的方式,让西州和豊朝缔结连理,敦睦邦交,累世通好。正在这时,朔博国王侄子利敦王爷闯到大殿上,怒气冲冲地指责西州待客不周。曲文成只好先让李承鄞去拜访明远公主。
高显留在大殿内据理力争,称豊朝先奉上了求亲国书,自然应该成功求娶到九公主。利敦王爷也不甘示弱,还搬出丰厚条件,作为迎娶公主的筹码。这时,小枫假扮成阿渡来到殿上,自称奉公主命令来试探两个使者的诚意。小枫准备了一碗五邪之血,称是取蝙蝠、毒蜥、蟾蜍、蝮蛇、蜈蚣的精血炼成,谁能喝下就代表有诚意。
高显和利敦王爷谁也不肯喝,小枫微微一笑,端起来一饮而尽,原来,这不过是葡萄浆液罢了。高显二人察觉被耍,气得涨红了脸,曲文成赶紧让小枫回去,承诺三日后给二位使者答复。小枫回到房间拿出李承鄞留下的布条,她只认得其中“三日见”几个字,不由得猜测一番,很担心李承鄞的伤势。
李承鄞去拜访明远公主,明远带着他来到一处密室,柴牧也等候在这里。明远告诉李承鄞,他的母亲顾玉瑶出身名门,嫁给皇上为妃,舅舅顾如晦将军遭到左相高于明的陷害,被栽上了通敌叛国的罪名,最后顾家满门被高于明所杀,而顾妃生下李承鄞后,被皇后下毒害死,最后,顾妃在临死之前,将唯一的儿子李承鄞托付给皇后,皇后没有子嗣,为了稳住宫中地位,便也好好抚养李承鄞长大,但是颇为严苛。
李承鄞这才知道,这么多年来,自己都是认贼作母。明远继续说道,当年,柴牧拼尽全力,才保住了顾家仅有的一条血脉,那就是顾剑。原来,顾剑是顾如晦的儿子,他就是李承鄞的表哥。丹蚩第一勇士赫夫得到密报,中原已经屯兵边境了,他急忙向头领汇报,丹蚩王铁达尔便命伊莫延带领精兵驻扎西境安护府城外,静观其变。
李承邺很快到达西州安护府,见到了李承鄞,两人与高显等人商讨着刺杀太子的真相,高显言语中替丹蚩人辩解,其心思可见一斑。高显私下里告诉李承邺,丹蚩的要害在铁达尔王帐,虽然王帐时常变幻位置驻扎,但是只要找到,就能将丹蚩一举拿下。李承邺大喜,命高显找到王帐位置,自己绝对不会亏待高显。
李承鄞得知王帐一事,决定自告奋勇去寻找王帐位置,柴牧很担心李承鄞的安危,便让顾剑保护他。柴牧还提出,小枫的外祖父就是铁达尔,如果小枫能帮忙寻找王帐,将是极大的助力。顾剑很为难,他不想利用小枫,可柴牧一再强调,顾剑是顾家唯一血脉,一定要报仇雪恨,怎么能为了一个女人耽误大事呢。顾剑左右为难。
小枫偷偷逃了出来,与顾剑见面,她提出自己的想法,如果自己和顾剑定了亲,那就不用和亲嫁给别国太子了。顾剑心里一惊,没有做出答复,小枫气得转身欲走,顾剑这才将她揽入怀中。顾剑其实很喜欢小枫,但他也实在不愿让小枫卷入血海深仇的斗争中。顾剑称要带小枫去见全天下最好的男子,小枫将信将疑地跟过去,没想到却见到了李承鄞。
第3集 李承鄞编造身份骗小枫 西州王悬赏抓捕公主
小枫意外看见李承鄞,她在惊喜之余忍不住追问,李承鄞留下的布条上到底写了什么。李承鄞没有回答,反而问起小枫的身份,小枫毫不隐瞒,直言自己是西州九公主,外祖父是铁达尔。李承鄞狡黠一笑,谎称自己名为顾小五,父母长辈都从事茶庄生意。小枫深信不疑,顾剑在不远处听着,无奈地摇了摇头。
李承鄞做出承诺,只要小枫看得懂布条上面的字,自己就帮忙不让小枫远嫁中原。小枫气呼呼地回到宫里,她根本看不懂中原文字,这实在太为难了。阿渡得知此事,也为公主打抱不平。王后不忍心看着女儿远嫁,便打算让小枫去丹蚩躲风头,让铁达尔王来保护她。小枫眉开眼笑,满口答应,还打算带着顾剑去丹蚩。在小枫心里,顾剑是最值得信任的人,一定会永远保护自己。
第二天,高显和利敦王爷去询问曲文成
/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[#@*&.]).*$/
如果是要求以上类别都包含,就这么写
/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[#@*&.])[a-zA-Z\d#@*&.]*$/
如果是要求包含且只包含,就这么写
另外你说的特殊字符指那些,可以自己在[#@*&.]这个里面添加扩充就行了
这个要用 它的 Asc 值 来判断了 程序如下:
Private Sub Command1_Click()
For u = 1 To Len(Text1.Text)
If Asc(Mid(Text1.Text, u, 1)) <= 90 And Asc(Mid(Text1.Text, u, 1)) >= 65 Then
a = a + 1
End If
Next
MsgBox "你输入的字符串" & Text1 & "出现大写字母的个数为: " & a
End Sub