せい则表达式

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
せい则表达式」てき各地かくち常用じょうよう名稱めいしょう
中国ちゅうごく大陸たいりくせい则表达式
臺灣たいわん正規せいき表示ひょうじしき[1]正規せいき表示法ひょうじほう
正規せいきひょうたちしき[2]規則きそく運算うんざんしき[3][4]
みなと正則せいそくひょうたちしき

せい则表达式英語えいごRegular expressionつね简写为regexregexpあるRE),またたたえ規律きりつひょうたちしき正規せいき表示ひょうじしき正規せいき表示法ひょうじほう規則きそく運算うんざんしきつねぶんまわし表示法ひょうじほう计算つくえ科学かがく概念がいねんよう簡單かんたんくしらい描述、ひきはい文中ぶんちゅう全部ぜんぶ符合ふごう指定してい格式かくしきてきくし現在げんざい很多ぶんほん编辑支援しえんよう正則せいそくひょう达式さがせひろだい符合ふごう指定してい格式かくしきてきくし

许多ほどじょ设计语言支援しえんよう正則せいそくひょう达式操作そうさくし,如Perl就内たていさおのう强大きょうだいてき正則せいそくひょう达式引擎。正則せいそくひょう达式这概念がいねん最初さいしょゆかりUnixてき工具こうぐ软件(れいsedgrep普及ふきゅう开。

譯名やくめい問題もんだい[编辑]

描述くし規律きりつてきひょうたちしきはらおうじゅん成章せいしょうしょうため規律きりつひょうたちしき(pattern expression/rule expression),ただし卻叫なりゆうかけじゅんかくてきregular expression,しるべ致現ざいゆう多種たしゅちゅう譯名やくめい,如將regularやくなり規律きりつ規則きそくせいせいあるつねぶんまわしはたexpressionやくなりひょうたちしき表示ひょうじしき表示法ひょうじほうある運算うんざんしきひとし

历史[编辑]

最初さいしょてきせい则表达式现于论计さんつくえ科学かがくてき动控せい论和形式けいしき语言论中。ざい这些领域中有ちゅうう对计さん动控せいてき模型もけい形式けいしき语言描述あずかぶん类的研究けんきゅう

1940ねん沃伦·むぎ卡洛かつあずか沃尔とく·がわいばらはたかみ经系统なかてきかみ经元描述なりしょう而简单的动控せいもと

1950年代ねんだい数学すうがく斯蒂芬·尔·かつ莱尼利用りようしょう为「せい集合しゅうごうてき数学すうがく符号ふごうらい描述此模がた肯·汤普逊はた此符ごうけい统引にゅう编辑QEDえいQED (text editor)ずいきさきUnixうえてき编辑ed,并最终引いれgrep此以きさき正則せいそくひょう达式广泛应用于各种Unixある类Unixけい统的工具こうぐちゅうせい则表达式てきPOSIX规范,ふん基本きほんがたせい则表达式(Basic Regular ExpressionBREかず扩展がたせい则表达式(Extended Regular ExpressionERE)两大流派りゅうはざいけんようPOSIXてきUNIXけい统上,grepegrepこれ类的工具こうぐ遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。grepvisedぞくBRE历史最早もはやてきせい则表达式,いん此元必须转譯きさきざい具有ぐゆう特殊とくしゅ含义。egrepawk则属于EREもと不用ふよう转譯。

Perlてきせい则表达式げんHenry SpencerえいHenry Spencer于1986ねん1がつ19にち发布てきregex,它已经演化成かせいりょうPCREPerlけんようせい则表达式,Perl Compatible Regular ExpressionsえいPCRE),いち个由Philip HazelえいPhilip Hazel开发てき,为很现代工具こうぐしょ使用しようてき库。

かくへんほど语言间關於正則せいそくひょう达式てき整合せいごう目前もくぜん[なに时?]开發進展しんてんとく很差。Perl6てき项目Apocalypseてき设计ちゅうやめこう虑到りょう这点。

[编辑]

せい则表达式以用形式けいしき语言论的方式ほうしきおもて达。せい则表达式よしつねりょう和算わさん组成,它们ぶん表示ひょうじくしてき集合しゅうごうざい这些集合しゅうごうじょうてき运算。给定有限ゆうげん字母じぼひょうΣしぐまてい义了れつつねりょう

  • そらしゅう表示ひょうじ集合しゅうごう
  • そらくし表示ひょうじ包含ほうがんいち个“含任なん、长度为0てきくしてき集合しゅうごう
  • 文字もじえいString literal表示ひょうじ包含ほうがんいち元素げんそてき集合しゅうごう

てい义了れつ运算:

  • くしせっ 表示ひょうじ集合しゅうごう,这里てき表示ひょうじしょう两个くし按顺じょ连接。れい如:
  • 选择 表示ひょうじてき并集れい如:
  • かつ莱尼(Kleene)ほしごう 表示ひょうじ包含ほうがん且在くしくしせっ运算闭合てきてき最小さいしょうちょうしゅう。这是以通过ちゅうれいある有限ゆうげん个字くしてきくしせっいた所有しょゆうくしてき集合しゅうごうれい如:

上述じょうじゅつつねりょう和算わさん形成けいせいりょうかつ莱尼代数だいすう

很多课本使用しよう对选择使用しよう符号ふごうあるがえだい竖线。

为了避免くくごう假定かていKleeneほしごうゆう最高さいこう优先级,接着せっちゃくくしせっ接着せっちゃく并集。如果ぼつゆう歧义则可以省略しょうりゃくくくごうれい如:(ab)c以写为abc,而a|(b(c*))以写为a|bc*

れい

  • a|b*表示ひょうじ
  • (a|b)*表示ひょうじ包括ほうかつそらくし任意にんいすうもくaあるb组成てき所有しょゆうくしてき集合しゅうごう
  • ab*(c|εいぷしろん)表示ひょうじ开始于一个a接着せっちゃくれいあるbかずさいきさきいち个可选的c组成てきくしてき集合しゅうごう

为了使ひょう达式さら简洁,せい则表达式也定义了?+aa*とうa+表示ひょうじa现至しょういち;而(a|εいぷしろん)とうa?表示ひょうじa现1ある不出ふしゅつ现。ゆうてきてい义中增加ぞうかりょう补算表示ひょうじざいうえただし不在ふざいなかてき所有しょゆうくしてき集合しゅうごう。补算ざい论上并非必要ひつよういん为它使用しよう其他ざん子来こらいひょう达,ただし它可以使一些表达式变得更加简洁。

这种义上てきせい则表达式以表达せい则语げん有限ゆうげんじょう态自动机せい接受せつじゅてき语言类。ただしざい简洁せいじょうゆう重要じゅうよう别。ぼう类正则语ごとただのうよう大小だいしょう指数しすうぞう长的动机らい描述,而要求ようきゅうてきせい则表达式てき长度ただ线性てきぞう长。

せい则表达式对应于乔姆斯基层级てき类型-3文法ぶんぽうただし通常つうじょう编程语言ある其相关库(れいPCREちゅう实现てきせい则表达式てきひょう达能りょく乔姆斯基层级なか类型-3文法ぶんぽうてきちょうしゅう[らいみなもと請求せいきゅう]ざい另一方面ほうめんざいせい则表达式导致这种大小だいしょうじょうてきばく炸的确定有限ゆうげんじょう态自动机NFA间有简单てきうつ;为此NFA经常用作ようさくせい则表达式てきがえ表示ひょうじしき

这种形式けいしきちゅう存在そんざい冗余,典型てんけいてきからだ现是存在そんざい不同ふどうてきせい则表达式以表达同样的语言。ゆう可能かのう对两个给定正さだまさ则表达式うつしいち算法さんぽうらい判定はんてい它们しょ描述てき语言いやほん质上相等そうとうそく简约ごと个表达式いた极小确定有限ゆうげん动机,确定它们いなどうとう价)。这种冗余以消减到什么程度ていどわが们可以找到仍有完全かんぜんひょう达力てきせい则表达式てきゆうおもむきてきしゅう吗?这提出ていしゅつりょう一个令人惊奇的困难问题。Kleeneほしごう并集あかり显是需要じゅようてきただしわが们或许可以限せい它们てき使用しようよし于正则表达式如此简单,ぼつゆう办法ざい语法じょう它重うつしなりぼう种规范形しき。过去公理こうりてき缺乏けつぼう导致りょうほしごう高度こうど问题えいStar height problem最近さいきんDexter Kozenようかつ莱尼代数だいすう公理こうりりょうせい则表达式。[らいみなもと請求せいきゅう]

很多现实世界せかいてきせい则表达式”引擎实现りょう不能ふのうようせい则表达式代数だいすうひょう达的とくせい[らいみなもと請求せいきゅう]

基本きほん语法[编辑]

一個正则表达式通常被稱為一個しきpattern),ためようらい描述あるものひきはいいち系列けいれつ符合ふごうぼう句法くほう规则てきくしれい如:Handel、HändelHaendel這さん个字くし以由H(a|ä|ae)ndel这个しきらい描述。だい部分ぶぶんせい则表达式てき形式けいしきゆう如下てき结构:

选择[编辑]

  • 竖线|代表だいひょう选择(そくあるしゅう),具有ぐゆう最低さいてい优先级。れいgray|grey以匹はいgreyあるgray

数量すうりょう限定げんてい[编辑]

ぼう个字きさきてき数量すうりょう限定げんていようらい限定げんてい前面ぜんめん这个まこと许出现的个数。さいつね见的数量すうりょう限定げんてい包括ほうかつ+?*数量すうりょう限定げんてい则代表出ひょうしゅつ现一次且仅出现一次):

  • ごう+代表だいひょう前面ぜんめんてき必须いたりしょういち。(1あるつぎ)。れい如,goo+gle以匹はいgoogle、gooogle、goooogleとう
  • 问号?代表だいひょう前面ぜんめんてき最多さいたただ以出现いち。(0ある1)。れい如,colou?r以匹はいcolorあるものcolour;
  • ほしごう*代表だいひょう前面ぜんめんてき以不现,也可以出现いちあるものつぎ。(0、1あるつぎ)。れい如,0*42以匹はい42、042、0042、00042とう

ひきはい[编辑]

  • 圆括ごう()以用てい操作そうさてき范围优先れい如,gr(a|e)yとう价于gray|grey(grand)?fatherひきはいfathergrandfather。

上述じょうじゅつ这些构造自由じゆう组合,いんH(ae?|ä)ndelH(a|ae|ä)ndelしょうどうてき表示ひょうじ{"Handel", "Haendel", "Händel"}。

せい确的语法可能かのういん不同ふどうてき工具こうぐあるほどじょ而异。

PCREひょう达式全集ぜんしゅう[编辑]

せい则表达式ゆう多種たしゅ不同ふどうてき风格。下表かひょうざいPCREえいPerl_Compatible_Regular_Expressions中元ちゅうげん及其ざいせい则表达式上下じょうげ文中ぶんちゅうてきぎょう为的いち个完整列せいれつひょう,适用于PerlあるものPython编程语言(grepあるものegrepてきせい则表达式文法ぶんぽうPCREてきしゅう):

描述
\ はたした一个字符标记为一个特殊字符(File Format Escapeきよし单见ほんひょう)、ある一个原义字符(Identity Escapeゆう^$()*+?.[\{|きょう计12个)、あるいち个向きさき引用いんようbackreferences)、ある一个八进制转义符。れい如,「nひきはいn」。「\nひきはいいち个换ぎょう序列じょれつ\\ひきはい\」而「\(」则匹はい(」。
^ ひきはい输入くしてき开始位置いち。如果设置りょうRegExp对象てきMultiline属性ぞくせい,^也匹はい\nある\rきさきてき位置いち
$ ひきはい输入くしてき结束位置いち。如果设置りょうRegExp对象てきMultiline属性ぞくせい,$也匹はい\nある\rまえてき位置いち
* ひきはい前面ぜんめんてきひょう达式れいあるつぎれい如,zo*のうひきはいz」、「zo」以及「zoo」。*とう价于{0,}。
+ ひきはい前面ぜんめんてきひょう达式いちあるつぎれい如,「zo+のうひきはいzo」以及「zoo」,ただし不能ふのうひきはいz」。+とう价于{1,}。
? ひきはい前面ぜんめんてきひょう达式れいあるいちれい如,「do(es)?以匹はいdoesちゅうてきdoかずdoes」。?とう价于{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} mnひとし为非负整すう,其中n<=m最少さいしょうひきはいn最多さいたひきはいmつぎれい如,「o{1,3}しょうひきはいfoooooodちゅうてきまえさん个o。「o{0,1}とう价于「o?」。请注意ちゅういざい逗号两个すう不能ふのうゆうそらかく
? 贪心りょうNon-greedy quantifiers):とう该字紧跟在任ざいにんなん一个其他重复修饰符(*,+,?,{n},{n,},{n,m})きさきめん时,ひきはいしき贪婪てき贪婪しきつき可能かのうすくなてきひき配所はいしょ搜索そうさくてきくし,而默认的贪婪しき则尽可能かのうてきひき配所はいしょ搜索そうさくてきくしれい如,对于くしoooo」,「o+?しょうひきはい单个「o」,而「o+しょうひきはい所有しょゆうo」。
. ひきはいじょ\r」「\n外的がいてきにんなん单个ようひきはい包括ほうかつ\r」「\nざい内的ないてきにんなん,请使用しようぞう(.|\r|\n)てきしき
(pattern) ひきはいpattern并获取这一匹配的子字符串。该子くしよう于向きさき引用いんようところ获取てきひきはい以从产生てきMatches集合しゅうごういたざいVBScriptちゅう使用しようSubMatches集合しゅうごうざいJScriptちゅう使用しよう$0…$9属性ぞくせいようひきはい圆括ごう,请使用しよう\(ある\)」。数量すうりょうきさき缀。
(?:pattern) ひきはいpatternただし获取ひきはいてきくしshy groups),也就说这一个非获取匹配,そん储匹はいてきくしよう于向きさき引用いんよう。这在使用しようある(|)らい组合一个模式的各个部分是很有用。れい如「industr(?:y|ies)」就是いち个比「industry|industriesさら简略てきひょう达式。
(?=pattern) せいこう肯定こうてい预查(look ahead positive assert),在任ざいにんなんひきはいpatternてきくし开始处匹はい查找くし。这是一个非获取匹配,也就说,该匹はい需要じゅよう获取きょう以后使用しようれい如,「Windows(?=95|98|NT|2000)のうひきはいWindows2000ちゅうてきWindows」,ただし不能ふのうひきはいWindows3.1ちゅうてきWindows」。预查消耗しょうもう,也就说,ざい一个匹配发生后,ざいさいきさき一次匹配之后立即开始下一次匹配的搜索,而不包含ほうがん预查てききさき开始。
(?!pattern) せいこう否定ひてい预查(negative assert),在任ざいにんなんひきはいpatternてきくし开始处匹はい查找くし。这是一个非获取匹配,也就说,该匹はい需要じゅよう获取きょう以后使用しようれい如「Windows(?!95|98|NT|2000)のうひきはいWindows3.1ちゅうてきWindows」,ただし不能ふのうひきはいWindows2000ちゅうてきWindows」。预查消耗しょうもう,也就说,ざい一个匹配发生后,ざいさいきさき一次匹配之后立即开始下一次匹配的搜索,而不包含ほうがん预查てききさき开始
(?<=pattern) はんむかいlook behind肯定こうてい预查,あずかせいこう肯定こうてい预查类似,ただ方向ほうこう相反あいはんれい如,「(?<=95|98|NT|2000)Windowsのうひきはい2000WindowsちゅうてきWindows」,ただし不能ふのうひきはい3.1WindowsちゅうてきWindows」。
(?<!pattern) はんこう否定ひてい预查,あずかせいこう否定ひてい预查类似,ただ方向ほうこう相反あいはんれい如「(?<!95|98|NT|2000)Windowsのうひきはい3.1WindowsちゅうてきWindows」,ただし不能ふのうひきはい2000WindowsちゅうてきWindows」。
x|y ぼつゆうつつみ围在()さと,其范围是せい个正则表达式。れい如,「z|foodのうひきはいzあるfood」。「(?:z|f)ood」则匹はいzoodあるfood」。
[xyz] 集合しゅうごうcharacter class)。ひき配所はいしょ包含ほうがんてき任意にんいいち个字れい如,「[abc]以匹はいplainちゅうてきa」。特殊とくしゅ仅有はんはす线\保持ほじ特殊とくしゅ含义,よう于转义字。其它特殊とくしゅ如星ごうごうかく种括ごうとうひとしさく为普どおり脱字だつじ^如果现在首位しゅい表示ひょうじ负值集合しゅうごう;如果现在くしちゅう间就仅作为普どおり。连字 - 如果现在くしちゅう表示ひょうじ范围描述;如果如果现在首位しゅいある末尾まつび)则仅さく为普どおりみぎかたくくごう应转义出现,也可以作为首现。
[^xyz] 排除はいじょがた集合しゅうごうnegated character classes)。ひきはいれつてき任意にんいれい如,「[^abc]以匹はいplainちゅうてきplin」。
[a-z] 范围。ひきはいざいUnicode编码ひょう指定してい范围ないてき任意にんいれい如,「[a-z]以匹はいaいたz」范围ないてき任意にんいしょう写字しゃじはは
[^a-z] 排除はいじょがたてき范围。ひきはいにんなん不在ふざいUnicode编码ひょう指定してい范围ないてき任意にんいれい如,「[^a-z]以匹はいにんなん不在ふざいaいたz」范围ないてき任意にんい
[:name:] 增加ぞうか命名めいめい类(named character class[註 1]なかてきいたおもて达式。ただのうようかたくくごうひょう达式
[=elt=] 增加ぞうかとうまえlocaleしもはいじょcollateとう价于eltてき元素げんそれい如,[=a=]可能かのうかい增加ぞうかä、á、à、ă、ắ、ằ、ẵ、ẳ、â、ấ、ầ、ẫ、ẩ、ǎ、å、ǻ、ä、ǟ、ã、ȧ、ǡ、ą、ā、ả、ȁ、ȃ、ạ、ặ、ậ、ḁ、ⱥ、ᶏ、ɐ、ɑ 。ただのうよう于方くくごうひょう达式。
[.elt.] 增加ぞうかはいじょ元素げんそcollation elementeltいたおもて达式ちゅう。这是いん为某些排じょ元素げんそゆかり个字组成。れい如,29个字ははひょうてき西にしはんきば语, "CH"さく为单个字はははいざい字母じぼCきさきいん此会产生如此はいじょ“cinco, credo, chispa”。ただのうよう于方くくごうひょう达式。
\b ひきはいいち个单词边かい,也就ゆび单词そらかく间的位置いちれい如,「er\b以匹はいneverちゅうてきer」,ただし不能ふのうひきはいverbちゅうてきer」。
\B ひきはい单词边界。「er\Bのうひきはいverbちゅうてきer」,ただし不能ふのうひきはいneverちゅうてきer」。
\cx ひきはいよしxゆびあかりてきひかえせい。xてき值必须为A-Zあるa-zこれいちいや则,はたc视为いち个原义的「cひかえせいてき值等于xてき最低さいてい5とくそく对3210进制まとあまりすう)。れい如,\cMひきはいいちControl-Mあるかい车符。\caとうこう于\u0001, \cbとうこう于\u0002, ひとしとう
\d ひきはいいち数字すうじとう价于[0-9]。注意ちゅういUnicodeせい则表达式かいひきはい全角ぜんかく数字すうじ
\D ひきはいいち个非数字すうじとう价于[^0-9]。
\f ひきはいいち个换页符。とう价于\x0c\cL。
\n ひきはいいち个换ぎょうとう价于\x0a\cJ。
\r ひきはいいち个回车符。とう价于\x0d\cM。
\s ひきはいにんなん空白くうはく包括ほうかつそらかくせいひょう、换页とうとうとう价于[ \f\n\r\t\v]。注意ちゅういUnicodeせい则表达式かいひきはい全角ぜんかくそらかく
\S ひきはいにんなん空白くうはくとう价于[^ \f\n\r\t\v]。
\t ひきはいいち个制ひょうとう价于\x09\cI。
\v ひきはい一个垂直制表符。とう价于\x0b\cK。
\w ひきはい包括ほうかつ划线てきにんなん单词とう价于「[A-Za-z0-9_]」。注意ちゅういUnicodeせい则表达式かいひきはいちゅう文字もじ
\W ひきはいにんなん单词とう价于「[^A-Za-z0-9_]」。
\xnn じゅう六进制转义字符序列。ひきはい两个じゅうろく进制数字すうじnn表示ひょうじてきれい如,「\x41ひきはいA」。「\x041」则等价于「\x04&1」。正則せいそくひょう达式ちゅう使用しようASCII编码。.
\num こうきさき引用いんようback-reference)一个子字符串(substring),该子くしあずかせい则表达式てきだいnum个用くくごう围起らいてき捕捉ほそくぐんcapture groupひょう达式(subexpressionひきはい。其中num从1开始てきじゅう进制せい整数せいすう,其上げん可能かのう9[註 2]、31[註 3]、99甚至无限[註 4]れい如:「(.)\1ひきはい两个连续てきしょうどう
\n 标识一个八进制转义值或一个向后引用。如果\nこれぜんいたりすくなn个获取的とりてきひょう达式,则n为向きさき引用いんよういや则,如果n为八进制数字すうじ(0-7),则n为一个八进制转义值。
\nm 3はち进制数字すうじ,标识一个八进制转义值或一个向后引用。如果\nmこれぜんいたりしょうゆうnm个获得子とくこおもて达式,则nm为向きさき引用いんよう。如果\nmこれぜんいたりしょうゆうn个获取,则n为一个后跟文字もじmてきこうきさき引用いんよう。如果前面ぜんめんてき条件じょうけん满足,わかnmひとし为八进制数字すうじ(0-7),则\nmしょうひきはい八进制转义值nm
\nml 如果n为八进制数字すうじ(0-3),且mlひとし为八进制数字すうじ(0-7),则匹はい八进制转义值nml。
\un Unicode转义序列じょれつ。其中n一个用四个十六进制数字表示的Unicodeれい如,\u00A9ひきはいばん权符ごう(©)。

Unicode处理[编辑]

ざい.NET、JavaJavaScriptPythonてきせい则表达式ちゅう以用\uXXXX表示ひょうじいちUnicode,其中XXXXよん16进制数字すうじ

Unicodeてきさん种性质:[5]

  • Unicode Property:ぞく于标てんそらかく字母じぼとうとうまいUnicodeただのうぞく于唯いちUnicode Property。.NET、JavaPHPRubyとう语言支持しじ具体ぐたいぶん类为:
    • \p{L}
      • \p{Ll}ある\p{Lowercase_Letter}しょう写字しゃじ(必须ゆうだいうつしてき形式けいしき)。
      • \p{Lu}ある\p{Uppercase_Letter}だい写字しゃじ(必须ゆうしょううつしてき形式けいしき)。
      • \p{Lt}ある\p{Titlecase_Letter}ぜん词首字母じぼだいうつしてき
      • \p{L&}ある\p{Cased_Letter}存在そんざい大小だいしょううつし形式けいしきてきLl, Lu, Ltてき组合)。
      • \p{Lm}ある\p{Modifier_Letter}おと标修饰字えいSpacing Modifier Letters
      • \p{Lo}ある\p{Other_Letter}具有ぐゆう大小だいしょううつしてきある字形じけい
    • 附加ふか符号ふごう\p{M}
    • ぶんへだた\p{Z}
      • \p{Zs}ある\p{Space_Separator}不可ふかてきそらかくただし占據せんきょ空間くうかん
      • \p{Zl}ある\p{Line_Separator}ぶんへだた綫字U+2028。
      • \p{Zp}ある\p{Paragraph_Separator}分段ぶんだんU+2029。
    • 符号ふごう\p{S}
      • \p{Sm}ある\p{Math_Symbol}数学すうがく符号ふごう
      • \p{Sc}ある\p{Currency_Symbol}つう货符ごう
      • \p{Sk}ある\p{Modifier_Symbol}:组合为其てき符号ふごう
      • \p{So}ある\p{Other_Symbol}:其他符号ふごう
    • かず值字\p{N}
      • \p{Nd}ある\p{Decimal_Digit_Number}所有しょゆうぶん本中ほんなかてき数字すうじ0いたり9かたち符号ふごう
      • \p{Nl}ある\p{Letter_Number}おこりらいぞう字母じぼてき符号ふごう包含ほうがん罗马数字すうじ
      • \p{No}ある\p{Other_Number}上角うえすみ标或下角したすみ数字すうじあるもの其他ぞく于0いたり9てき数字すうじかたち符号ふごう
    • 标点符号ふごう\p{P}
      • \p{Pd}ある\p{Dash_Punctuation}にんなん种类てき连字ごうある连接ごう
      • \p{Ps}ある\p{Open_Punctuation}にんなん种类开くくごう
      • \p{Pe}ある\p{Close_Punctuation}にんなん种类闭括ごう
      • \p{Pi}ある\p{Initial_Punctuation}にんなん种类开引号
      • \p{Pf}ある\p{Final_Punctuation}にんなん种类闭引ごう
      • \p{Pc}ある\p{Connector_Punctuation}:连接词的标点符号ふごう,如下划线。
      • \p{Po}ある\p{Other_Punctuation}:其他标点符号ふごう
    • 其它符号ふごう\p{C}包括ほうかつ不可ふか见控せいあずかよう码位
      • \p{Cc}ある\p{Control}ASCIIあるLatin-1ひかえせい0x00-0x1Fあずか0x7F-0x9F
      • \p{Cf}ある\p{Format}不可ふか见的格式かくしき指示しじ
      • \p{Co}ある\p{Private_Use}私用しよう码位
      • \p{Cs}ある\p{Surrogate}UTF-16编码てき代理だいり对的一半いっぱん
      • \p{Cn}ある\p{Unassigned}使用しようてき码位
  • Unicode Block:按照编码间划ぶんUnicodeまいUnicode Blockなかてき编码ぞく于一个编码区间。れいJava语言\p{ InCJK_Compatibility_Ideographs },.NET语言\p{IsCJK_Compatibility_Ideographs}
  • Unicode Script:按照所属しょぞくてき书写けい统来划分UnicodePHPRuby版本はんぽんてい于1.9)支持しじUnicode Scriptれい\p{Han}表示ひょうじ汉字(ちゅう文字もじ)。

さんUnicodeせい质对应的组补しゅうはた开头てき\pあらため\P,其它变。

POSIX[编辑]

POSIX 说明 ASCII环境 Unicode环境
[:alnum:] 字母じぼ数字すうじ [a-zA-Z0-9] [\p{L&}\p{Nd}]
[:alpha:] 字母じぼ [a-zA-Z] \p{L&}
[:ascii:] ASCII [\x00-\x7F] \p{InBasicLatin}
[:blank:] そらかくせいひょう [ \t] [\p{Zs}\t]
[:cntrl:] ひかえせい [\x00-\x1F\x7F] \p{Cc}
[:digit:] 数字すうじ [0-9] \p{Nd}
[:graph:] 空白くうはく外的がいてき [\x21-\x7E] [^\p{Z}\p{C}]
[:lower:] しょう写字しゃじはは [a-z] \p{Ll}
[:print:] 类似[:graph:]ただし包括ほうかつ空白くうはく [\x20-\x7E] [^\P{C}]
[:punct:] 标点符号ふごう [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] [\p{P}\p{S}]
[:space:] 空白くうはく [ \t\r\n\v\f] [\p{Z}\t\r\n\v\f]
[:upper:] だい写字しゃじはは [A-Z] \p{Lu}
[:word:] 字母じぼ [A-Za-z0-9_] [\p{L}\p{N}\p{Pc}]
[:xdigit:] じゅうろく进制 [A-Fa-f0-9] [A-Fa-f0-9]

優先ゆうせんけん[编辑]

 優先ゆうせんけん 符號ふごう
最高さいこう \
こう ()(?:)(?=)[]
なか *+?{n}{n,}{n,m}
ひく ^$ちゅうかい
最低さいてい くしせっそくあい邻字连接ざい一起かずき
最低さいてい |

はんれい[编辑]

  • 以下いか使用しようPHPかたりげん
  • けんしょうくしいやただ數字すうじあずか英文えいぶんくしちょうなみざい4~16元之もとゆきあいだ
    <?php
    $str = 'a1234';
    if (preg_match("/^[a-zA-Z0-9]{4,16}$/", $str)) {
        echo "CONFIRM";
    } else {
        echo "FAILED";
    }
    ?>
    
  • 簡易かんいてき中華民國ちゅうかみんこく國民こくみん身分みぶんしょうごうけんしょう
    <?php
    $str = 'a1234';
    if (preg_match("/^[A-Za-z][1289]\d{8}$/", $str)) {
        echo "CONFIRM";
    } else {
        echo "FAILED";
    }
    ?>
    
  • 以下いか使用しようPerlかたりげん
  • けんしょうくしいやただ數字すうじあずか英文えいぶんくしちょうなみざい4~16元之もとゆきあいだ
    print $str = "a1234" =~ m:^[a-zA-Z0-9]{4,16}$: ? "CONFIRM" : "FAILED";
    
  • 簡易かんいてき中華民國ちゅうかみんこく份證ごうけんしょう
    print $str = "a1234" =~ m"^\w[1289]\d{8}$" ? "CONFIRM" : "INVALID";
    
  • 以下いか使用しようpythonかたりげん
  • 使用しようせい表示ひょうじしきひきはいip
    import re
    s=' 192.137.1.336  192.168.1.137.123  192.168.1.138 '
    print(re.findall(r'(?<![\.\d])(?:25[0-5]\.|2[0-4]\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?![\.\d])',s))
    

相關そうかん條目じょうもく[编辑]

ちゅう[编辑]

  1. ^ 命名めいめい类。对于C++11てきregex_traits::lookup_classname,かけしょうかえしかい类的名字みょうじ:"alnum", "apha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "d", "s", "w"
  2. ^ 命名めいめいBREあずかgrep最多さいたただのうこうきさき引用いんよういた9
  3. ^ Visual C++てきregex库最ただのうこうきさき引用いんよういた31
  4. ^ ECMAScriptきりこうきさき引用いんようてき上限じょうげん

参考さんこう文献ぶんけん[编辑]

  1. ^ そう彙、學術がくじゅつ名詞めいし暨辭しょ訊網. 國家こっか教育きょういく研究けんきゅういん. [2018-12-24]. (原始げんし内容ないようそん档于2018-12-24). 
  2. ^ 正規せいきひょうたちしき - JavaScript. MDN. しゃぐん編輯へんしゅう. [2023-06-10]. 原始げんし内容ないようそん档于2023-06-28. 
  3. ^ 軟體操作そうさしょう撇步 –Dreamweaver CS4規則きそく運算うんざんしきかい. 師友しゆうかい電子でんしほうだい 181 . 財團ざいだん法人ほうじん中華民國ちゅうかみんこく電腦でんのう技能ぎのう基金ききんかい. 2009-11-25. (原始げんし内容ないようそん档于2023-06-10). 
  4. ^ EmEditor 如何いか: 規則きそく運算うんざんしき語法ごほう. Emurasoft, Inc. (原始げんし内容ないようそん档于2023-03-29). 
  5. ^ Unicode Regular Expressions. [2017-09-19]. (原始げんし内容ないようそん于2021-04-01). 

外部がいぶ链接[编辑]