1. re正则表达式,这个代码什么意思(初学者)
这个正则就是匹配数字;
-?表示前面可以有一个可选的减号;
\d+表示一到多个数字,专(-?\d+)这个表示整属数部分;
(\.\d+)?表示一个小数点跟多个数字,?表示前面这部分是可选的,这部分匹配一个可选的小数部分;
^(\d)$就是0-9的任意一个数字;
^表示以...开头,\d表示0-9的数字,$表示以...结尾;
所以这个就是表示单个数字了。
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
2. 正则表达式,匹配逗号
String str = "a:122,,122,,,21,,2,,,343";
str = str.replaceAll("(?<=\d+),{2,}(?=\d+)", ",");
System.out.println(str);
3. 火星文是谁发明的谁最先提出这个词
火星文由符号、繁体字、日文、韩文、冷僻字或汉字拆分后的部分等非正规化文字符号组合而成 火星文 。咋看都像是乱码或打错的字,用法也不同于汉字那么规范,从字面上根本无法了解。其实,“火星文”几年前就作为一种游戏用语在泡泡堂流行,接着又通过QQ资料及聊天快速散播,成为许多年轻人的共用语言。据考证,“火星文”起源于我国台湾地区。一些上网族最初为了打字方便,用注音文替代一些常用文字在网上交流,达到了快速打字兼可理解内容的效果。很快,一些台湾网友觉得这种文字另类醒目,便把这种输入方式发扬光大。随着《劲舞团》等网游在大陆的流行,这一潮流随着网游等渠道进入大陆,一部分网友开始延续这种独特的文字,并自创了适合简体 劲舞团 中文发挥的输入方式,比如“劳エ”(老公)、“侽喷叐”(男朋友)、“蒶ロ耐·”(很可爱)“伱傃谁”(你是谁)。当使用人群和新生词组形成一定规模后,出现了一些热衷软件开发的网络高手制作出“火星文”专用软件,在网上流行的有“大黑鱼”、“我爱火星文”等软件。转换软件的出现使得“火星文”具备了密码功能,它成了一个群体保护隐私的方法。在受众中,这年轻的群体成了火星文的追捧者和传播者。有些“火星汉字”只能在《康熙字典》或《辞海》才能查到,一般的新华字典都查不到。中国现在部分的“90后”,因为凸显个性而使用。 火星文,字面可解作火星人用的文字。随著网际网路的普及,网友(尤其是年轻网友)开始大量使用以同音字、音近字、特殊符号来表音的文字。由于这种文字与日常生活中使用的文字相比有明显的不同并且相当奇异,故被称为火星文。 编辑本段发展经过 缘起:新输入法诞生 考证,火星文最先源起于台湾 ,因仓颉、注音等繁体输入法出现,网友在打字时会频繁出现一些错别字,久而久之,大家都能明白常见错别字的意思,就默认使用了。 量变:为缩短打字时间采用符号+错别字+方言 此后,网友为了缩短打字时间 ,在网上非正式场合就使用更方便的符号、方言和更多的错别字来进行交流。 发展:觉得好玩,创造出新的词组 慢慢地,一部分觉得这种方式好玩, 便又创造出新的词组,比如“劳工”、“男盆友”、“粉口爱”、“你素谁”。 质变:在小圈子流行,网络达人发明转换软件 当使用人群和新生词组形成一定规模后, 出现了一些热衷软件开发的网络高手制作出“火星文”专用软件,在网上流行的有“大黑鱼”等软件。 编辑本段来源 火星文最早起源是由于网友打繁体字时常出现的错别字而慢慢形成。目前火星 火星文外挂 文已发展成为由中文繁体、日文、英文、古文字、表情符号组合而成的字体。 互联网普及以后,大量年轻群体也成为忠实的网友。火星文于是作为一种网络次文化而出现。火星文的使用群体多为使用网络频度最高的青少年,他们利用MSN等聊天工具和BBS将火星文传播并迅速流行。青少年的同龄认同心理,游戏心理,标榜自我的个性使得火星文得以流行。火星文最早的名称源自周星驰的电影《少林足球》,片中周星驰对于打扮怪异的女主角阿梅(赵薇饰)说:“你快点回火星吧,地球是很危险的!”火星一词遂开始成为年轻族群形容不同寻常的怪异事物。 大陆火星文最早约出现于2002-2003年,由于网络游戏《奇迹》设立外挂举报制度,众玩家为规避举报而使用近似乱码之异体“汉字”作为人物名,以期达到令举报者无法输入被举报角色名字之目的。尔后乱码字作为时尚被应用到QQ资料,进而扩散到如今的各个场合。 对于火星文的最初来源已不可考,比较流行的说法是最早起源于台湾省的中小学,学生们用自创的“文字”进行加密交流以免被老师、家长截获并破译。后随互联网的普及在中国大陆生根发芽,并因“正则表达式匹配”式的内容审核而被大规模应用——很多网友反映,基于正则表达式匹配的内容审核不适用于中文这种复杂多变的语言,往往因为断句、分词的原因本不带有“非法信息”的正常言论无法通过审核而火星文的出现提供了一种解决方案——虽然从认读上会给大家带来很多麻烦。 编辑本段种类 火星文种类繁多,而且没有统一标准。同一句由不同人解读可能有完全不同 火星文 的结果。以下列出几种常见的火星文形式。但请注意,并非文章一出现以下用法,就是火星文。火星文的成立条件是:流行于特定的范围或交际圈内,对其他非相关人可能会造成阅读与理解困难的非正规文字。以下用法可能对某些人来说是家常便饭的正常用语,但对另一些人来说则是无法理解的“火星文”。 因此,火星文的判定其实是一个见仁见智的问题。 有些文字可能曾经是火星文,但是在时间长久与使用的积累下变成一种约定成俗的通用文字,如BTW(By the way)、CU(See you)等;有些则是地方语言的直接汉字化,如毛(么),偶(我)等;还有一些则为其他语言的音译或者文字,如嘉年华(Carnival)私、仆(日语的“我”)。以上的类型通常不会被称为火星文。 同音别字 台湾常用的注音输入法和大陆常用的拼音输入法,要完成一个文字的输入,需要在输入完整的注音符号后,再加上选字方能完成,但中文同音字的情况相当多,结果产生了许多不选字的使用者(大多是因为求快,懒得选字。也有少部分是国文能力不佳,没有选字能力),而使得文章出现大量的同音别字。 例:我最喜欢再空闲的时候看输了。 —— “再”应为“在”;“输”应为“书” 翻译错误 常见于非中文电脑游戏的中文版。例如:《无冬之夜》中文版的错误广为知名,其中又以踢牙老奶奶最受关注。许多网络使用者将这些错误讥为“火星文”,台湾英宝格更被讥为“火星文研究所”。部分网络使用者认为,这是火星文最早的用法和最早的出处。 注音文 部分网络使用者为了偷懒或装可爱,将完整的注音拼音精简化,取注音符号中的声母来代表原本的文字,形成台湾地区特有的网络语言。 例:我爱我ㄉ家人。 ——“ㄉ”应为“的” 例:ㄋ们好ㄚ! ——“ㄋ”应为“你”;“ㄚ”应为“啊” 相似音/多字合一 火星文 也有将多个字合在一起表示的情况,或是使用发音相近的字取代原本的文字。 例:酱很好阿! —— “酱”表示“这样”的合音 例:表这样做! —— “表”表示“不要”的合音 例:偶口以跟你作朋友吗? —— “偶”应为“我”,此为台湾国语发音,故成“偶”;“口”应为“可” 例:3Q ——“3Q”为英文“Thank you”的相似音 例:这种few(fu)很好! ——“few(fu)”为英文“feel”的相似音;“ 这种few(fu)很好!”表示“这种感觉很好!” 混合语言用语 闽南语用语(以国语谐音表示) 例:街系挖欸喀! —— 闽南语:这是我的脚。 例:揪! —— 闽南语:约。 例:龙模揪耶啦! —— 闽南语:都没约的啦。 客家话用语(以国语谐音表示) 例:嘿咩,就是说阿! 火星文 —— “嘿咩”正写为“系咩”,是客家话的:“是阿”之意。 ——“崖”正写为“我”,是客家话的:“我”之意。 ——“麦怪”正写为“乜野”,是客家话的:“什么”之意。 日文用语 例:你是我的好麻吉! —— “麻吉”是日文中“朋友”的意思,所以翻译为“你是我的好朋友” 例:私今天没事做。 —— “私”是日文“我”的意思。另外会出现这种文法是因为“私”在速成输入法中与“我”相近(“我”,“私”) 英文用语 例:这年头谁不用咕狗写作业? —— “咕狗”是Google的中文音译 例:这是我的唉低 —— “唉低”就是ID(identity)的音译 例:今天好海皮! —— 直接使用英文“happy”或是相似中文发音代换中文的高兴 没有作文格式的文句 没有做好排版或没加标点符号造成阅读困难的形式。 例:但在台湾社会中火星文的另一种解释是指流行于台湾年轻族群中一种融合了各种语言符号 来替代中文汉字的次文化用语一般来说火星文并没有严谨的定义运用上也不局限于网络用语通常 皆可泛称为火星文,由于火星文是一种新出现的次文化因此在2006年1月22日23日中国 九十五学年度大学学科能力测验国文科试题出现火星文时而备受争议 (重组后文章:但在台湾社会中,火星文的另一种解释是指“流行于台湾年轻族群中一种融合了各种语言符号来替代中文汉字”的次文化用语。一般来说,火星文并没有严谨的定义,运用上也不局限于网络用语,通常只要让人无法立即判定理解的文句皆可泛称为火星文。由于火星文是一种新出现的次文化,因此在2006年1月22-23日,中国九十五学年度大学学科能力测验国文科试题出现火星文时而备受争议。) 符号标示 直接使用发音或意义相关的符号来取代字 例:你↓到我了! —— 使用“↓”取代“吓”字 一般认为表情符号并不属于火星文。 符号火星文大量利用象形、仿拟、飞白、比喻、谐音、拟人等手法构成新词。除在构词法上的随意组合、任意搭配外,也使网络语言更加委婉,而委婉可以淡化语言中贬义或消极语义特征,也可以掩盖羞于的令人难堪的事实,避免交际中的尴尬和唐突现象,使语言具有幽默讽刺温和的功能。 比如:典型的象形笑脸符:-),orz(跪在地上的小人),我们形容某人说话拐弯抹角用“很S(从S的外在形体上看)”,形容接吻为“种草莓”,设陷阱为“挖地洞”,形容人脑转的慢、跟不上潮流为“286”;借用儿童的嗲语来表示委婉:PP(漂亮,钞票),屁屁(屁股),怕怕(害怕),东东(东西);还在句末常用“喔、噢、的噢”等语气词作语缀来表示撒娇或儿化,如“要记着去捧场噢”“慌乱是会出错的噢”等。 总之,符号火星文这种独特的文字创作,思考模式的趣味性,使网络族的沟通方式与生活增另一番情趣。他们使网络语言有意无意的体现出国际化、时尚化的特点。他们自创的语言不少是语言游戏式的,并非不尊重语言传统规则,只是增添情趣来变化语言,玩上一会文字。 混和用法 混和用法由以上各种用法组合而成,是最容易造成阅读困难的语文方式,绝大多数被称为“火星文”的文句都是混和用法所产生的。 例:偶ㄉ电脑坏掉ㄌ害偶一整天都粉sad~ >"< /苊菂电脑坏扌卓叻,嗐硪⑴整忝嘟彳艮伤吣~ ──(中译:我的电脑坏掉了,害我一整天都很伤心~) 例:1切斗4幻j,↓b倒挖d! ──(中译:一切都是幻觉,吓不倒我的!) 符号表情、象形图案 一般认为表情符号并不属于火星文。 异体字 而另外一种异体火星文,则只是借助一些工具,将汉字转换成形似或者音似的繁体字/异体字,一般的异体火星文即使没接触的人也大体可看懂,比如: 烸兲爱伱哆┅点 每天爱你多一点 通过工具将简体字转换成不常用的异体字,但大致上通过上下文可以猜出原意。之所以有人喜欢使用这种异体火星文,更多的反映了未成年人的叛逆心理,这种火星文,可以说没有什么创意,大多是通过工具机械的转换而来,如果说符号火星文的使用显出使用者的一种机智,那么异体火星文仅仅反映出使用者的懒惰。这种标新立异,漠视常规,是典型的叛逆心理。 这种“异体火星文”几年前就作为一种游戏用语在泡泡堂流行,接着又通过QQ资料,QQ签名快速散播。对于异体火星文,有很多反对者,他们把异体火星文称为“脑残体”。 游戏简写 因为玩网络游戏打怪练功闲暇之虞会打屁聊聊天,有时处于没空打字或是紧急情况下为节省时间简略打字所延伸出来的产物。火星文很久以前就已经广泛应用存在于各类游戏之内,也就是俗称的术语。 游戏火星文 例如:“帮+4”等同于“帮加速”。 还有+5+6+7+8的应游戏不同各有各的简称。 经过长时间的演化,不再局限于游戏之中的术语框框,被大众广泛使用,使而延续至今。在游戏中最常见的有:[+U!]-[好好!],[没U]-[你好],[77]—[88]-[99],[%%]-[$$],等等… 网络用语 对某些社会事件的调侃或讽刺 某些代表性的社会事件往往会促成网络火星文的产生,这些火星文多带有调侃或讽刺的意味,多见于中国大陆。 例:我又被河蟹了 ——“河蟹”也作“和谐”,意指我的帖子又被删除了(或网站被关了) 例:这帖很黄很暴力 ——“很黄很暴力”原本带有反讽意味,与“很好很强大”类似,后来涵义被泛化,有时也指帖子的内容很强,让人耳目一新等。 例:关我鸟事,我是出来打酱油的——对某些话题不愿表态,多喻指网络上不谈政治,不谈敏感话题,以此话回帖而已。 例:我是来做俯卧撑的 ——涵义同上,表达对时事不关心、不评论,只做自己事的态度。 最初火星文 因为玩网络游戏打怪练功闲暇之虞会打屁聊聊天,有时处于没空打字或是紧急情况下为节省时间简略打字所延伸出来的产物。 火星文很久以前就已经广泛应用存在于各类游戏之内,也就是俗称的术语。 例如:“帮+4”等同于“帮加速”。“==”等同于“等等” 。 还有+5+6+7+8的应游戏不同各有各的简称。 经过长时间的演化,不再局限于游戏之中的术语框框,被大众广泛使用,使而延续至今。 在游戏中最常见的有:[+U!]-[好好!],[没U]-[你好],[7 7]—[88]-[99],[%%]-[$$],等等…… 编辑本段使用群体 在大量的85后,90后,95后一族中有所使用,在游戏玩家中也屡屡出现火星文的角色名字。 另外,在军事通信领域也用一些所谓的“火星文”。 编辑本段使用方法 火星文可分为偏旁部首,象形,混合,分离三种。 偏旁部首:主要看偏旁 (例如:涐諟焱謃亼。。)象形:看着像什么就读什么。(例如:‰↑,翻译过来就是楼上)分离:主要是把字的偏旁部首分开(例如: 弓长 , 女子。。)混合:结合上面的方法看,有时还有修饰符号(例如:涐瑷焱謃☆℃)再者就是使用繁体字(例如:繁体芓),偶尔也会创造一些根据现有文献无法翻译的文字,这也能理解,毕竟是火星文嘛! 现在越来越多的80后90后年轻人人开始说火星语了。 80后,90后,这些新时期成长起来的一代,为了彰显个性,一种被斥为“非主流”的网络语言,开始大面积流行开来。 这种非主流语言,说简单点就是用[繁体字][异体字][同音字][错别字]来替换正常的文字。尤其是前两者。 莓兲想埝祢巳宬儰⒈种漝惯 每天想念你已成为一种习惯 前面一行,如果你不仔细看每一个字,只扫一眼,也能“看”明白,如果仔细看每一个字,又有多少认识呢?这种“有趣”的文字对于喜欢新奇的未成年人无疑是一种巨大的诱惑,这从这种文字在QQ网名和签名上的泛滥可见一斑。 当然这种文字被一些专家学者认为是有损语言纯洁的有害物质,“火星文”也因此得名。早期也被称作真笔字。既然是新生的事物,其实叫什么名字并不重要,按照一般的习惯,在这里我们这样定义: 火星文这个词比较形象也被大多数人接受,我们还直接使用他,用来泛指各种网络(也包括日常)的另类语言。然后我们再把火星文细分成两大类: 符号火星文 各种表情符号包括传统的:)和新兴的orz(不认识这个符号?说明你是80前的,有些落伍了哦,这是一个跪在地上的小人,代表郁闷,佩服等含义)等等,还有各种速记的符号比如u,4,886等等。这种火星文应该被认为是比较正宗有创意的,一旦明白含义,是人大都会会心一笑。当然不熟悉的人可能完全看不明白,尤其是大量运用缩写时。一般的错别字音译字往往也归在此类比较合适,比如[粉] 异体火星文 异体火星文=脑残体,这种文字可是说除了有趣没太多意思,目前网上各种自动转换工具,甚至输入法都已经流传开来,可以认为只是把文字做了一次转换罢了。这种文字反而是即使完全不熟悉的人也大略能看懂。 很多人不同意脑残体属于火星文,他们大多对脑残体极度反感欲除之而后快,但又钟情于符号火星文,这种口水仗其实不会有任何结果,我们这里只是按照一般习惯还是把脑残体作为一种火星文,毕竟许多脑残体的工具、用户都称自己使用的是火星文输入法,说的是火星语。同时我们把只包含繁体字、异体字和生僻字的称作[纯异体火星文]。[纯异体火星文]几乎只能在网络上使用,往往还要借助一些专用的火星文转换器,因为日常使用太不方便。这两类东西差别还是很明显,但是也有不少共性,同样冠以火星文也未尝不可啊。 最后小结 火星文,作为一种娱乐工具,有其存在发展的合理性,特别是符号火星文,可以作为网络文化的一个重要组成部分。至于异体火星文,如果把它当作一种美术装饰字,不要看做文字而当作图片来对待,尤其是在QQ签名这样的地方大量使用。 对于火星文的看法,每个人的说法都不一样。 [1] 编辑本段字义破解 符号火星文主要有两大类写法:象形、拟音。 1.象形 如果只知道“orz”(五体投地,用于小孩)而不知道“or2”(五体投地, Orz 用于翘屁股的)和“orz6”(偶认栽咯)等扩展用法,火星文的皮毛 都没有掌握。有时候,你觉得那些字看起来像什么东西,那么它们表达的很有可能就是你想到的东西。 2.拟音 读起来像是什么字,表达的就是什么字。比如“u”(音似“有”,“呦” 等)、“4”(音似“是”,“事”,“世”等)。 3.异体火星文 除了通过工具生成,手工一般主要通过:合并的方法来书写。 4.合并 经典的“弓虽”(强)、“丁页”(顶)已经落伍,“彦页刀巴“(颜色)、”亻壬ィ可”(任何)也不算时兴。看到别扭的两个偏旁或者单字,就试着把他们合并起来理解吧。 5. IM俗语放送 举例说明:“迷你滚”指比“滚”更亲密,小滚一下,应该是来自那个MSN头像上在打滚的豆子人;“书法家”指一个人把一个八字儿没一撇的事儿,愣是写成了有型有款的乌托邦;“Orz”=“佩服得五体投地”。 6.论坛 举例说明:“老衲”指在跟帖中无事生非的灌水者,曾一度在网易跟帖中颇为活跃。“菊花酵母”在文艺论坛中指得是80后作家郭敬明。“人不能太八分斋了”在天涯论坛指得是“人不能太装了”。 7.网络游戏 举例说明:“小D”是对网络游戏《魔兽世界》里德鲁依的称呼,“1004”在《劲舞团》里是“天使”的意思。 基本用户群 在大量90后一族中广泛使用,在游戏玩家中也屡屡出现火星文的角色名字 编辑本段火星文输入法基本介绍 “火星文输入法”是一款超炫的火星文即时转换软件,时下QQ用户的新宠,非主流一族的最爱!请注意,它可不是单纯的输入法软件哦,而是可以兼容所有中文输入法(例如搜狗拼音输入法、极品五笔输入法等)的外挂程序。无论您用拼音还是五笔输入法打字,它都能把文字自动转换为酷酷的火星文,无需改变原有的打字习惯。除此之外,还能随时切换火星文、繁体、简体三种状态,随意打出像*^_^*、(⊙o⊙)、(^_^)/~~这样的个性火星符号,方便极了! 最新版“火星文输入法”的软件界面焕然一新,提供了5种皮肤(有女生专用皮肤哦)供您选择,还增加了火星文转换器、QQ签名美化、线体字转换器等多款火星文工具,以及自定义火星文、火星符号等实用功能……更多神秘功能期待您下载体验! “火星文输入法”被广泛应用于QQ聊天、QQ空间、QQ网名、QQ个性签名、博客、论坛、网络游戏等,自推出以来,获得了网友的一致好评! 软件特点 1.随心打火星文 “火星文输入法”可以随心所欲打出各式字母数字火星文、拆字火星文,还有全新“闪字”功能,马上试试吧! 输入法外挂 2.兼容所有输入法 “火星文输入法”支持搜狗、谷歌、五笔输入,只要你想得到的输入法,都能随手变成火星文! 3.支持多种应用 “火星文输入法”支持QQ、MSN、51挂挂等一切聊天工具,用于写昵称、换签名、玩游戏、顶贴子、踩博客。 4. 超酷火星符号 “火星文输入法”收集并更新网上最潮表情,如“o(∩_∩)o”、“じòぴé”、“囧rz”等等,并提供自定义功能。 5.超炫皮肤随心换 “火星文输入法”全新炫彩皮肤,配有可爱卡通动物装饰,HELLO KITTY、嘻哈猴、黑黑猪等四款皮肤可随心更换! 6.火星文随机打 “火星文输入法”1个汉字随机打出不同的火星文,如“爱”可以打出“嗳”、“瑷”、“à!”。适合展现不同的你!
4. 高级Java开发中什么是正则表达式
Java 正则表达式
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
Java正则表达式和Perl的是最为相似的。
java.util.regex包主要包括以下三个类:
Pattern类:
pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
举例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
public static void main( String args[] ){
// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}
}
5. 正则解惑
前后的/是正则表达式内容的开始和结束,类似字符串的引号一样,是一个固定的语法规定,正则表达式后面的字符是修饰或者选项,例如你这的g表示多次匹配,表示匹配所有满足匹配的项目,特别是在替换里面有用,如果没有g就只替换第一个。
6. 正则表达式 1-9任意数字
正则表达式 1-9任意数字:[1-9] 。
(6)正则表达式是谁发明的扩展阅读:
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
7. 正则表达式是谁发明的,有什么用
一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符串称作正则表达式中的元字符。
如:
JAVA中“\\dhello”中的\\d就是有特殊意义的元字符,代表0到9中的任何一个数字。
8. 什么是正则表达式举例说明一下
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。
例子: ^.+@.+\\..+$
2. 正则表达式的历史
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分
3. 正则表达式定义
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
3.1 普通字符
由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。
3.2 非打印字符 字符 含义
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
3.3 特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。
特别字符 说明
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
3.4 限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。
*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
正则表达式的限定符有:
字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
3.5 定位符
用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。不能对定位符使用限定符。
3.6 选择
用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
其中?:是非捕获元之一,还有两个非捕获元是?=和?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
3.7 后向引用
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对相关匹配的保存。
9. 谁发明 零宽断言 这个词
赞一个,“表达式规则”就顾名思义了。‘零宽断言’,‘Lookahead and Lookbehind Zero-Length Assertions’直译过来的,功能上它去匹配了字符串,只告诉你匹配是否成功。Zero-Length,不消费任何字符;Assertions,成功还是失败,所以是断言。改名叫‘不占用字符匹配’吗?总之,都不是很容易被理解的。