正则表达式语言元素

更新时间:2023-05-25 22:49:58 阅读: 评论:0

正则表达式
Framework SDK提供了大量的正则表达式工具,使您能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本模式。下面详细介绍可用于定义正则表达式的字符、运算符和构造。
字符转义
大多数重要的正则表达式语言运算符都是非转义的单个字符。转义符\(单个反斜杠)通知正则表达式分析器反斜杠后面的字符不是运算符。例如,分析器将星号(*)视为重复限定符,而将后跟星号的反斜杠(\*)视为Unicode字符002A。下面列出的字符转义在正则表达式和替换模式中都会被识别。
转义符【一般字符】,说明:除.$^{[(|)*+?\外,其他字符与自身匹配。
转义符【\a】,说明:与响铃(警报)\u0007匹配。
转义符【\b】,说明:如果在[]字符类中,则与退格符\u0008匹配;如果不是这种情况,请参见本表后面的“注意”部分。
转义符【\t】,说明:与Tab符\u0009匹配。
转义符【\r】,说明:与回车符\u000D匹配。
转义符【\v】,说明:与垂直Tab符\u000B匹配。
转义符【\f】,说明:与换页符\u000C匹配。
转义符【\n】,说明:与换行符\u000A匹配。
转义符【\e】,说明:与Esc符\u001B匹配。
转义符【\040】,说明:将ASCII字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。(有关更多信息,请参见反向引用。)例如,字符\040表示空格。
转义符【\x20】,说明:使用十六进制表示形式(恰好两位)与ASCII字符匹配。
转义符【\cC】,说明:与ASCII控制字符匹配;例如,\cC为Ctrl-C。
转义符【\u0020】,说明:使用十六进制表示形式(恰好四位)与Unicode字符匹配。
注意: Framework不支持用于指定Unicode的Perl5字符转义。Perl5字符转义的格式是\x{####…},
其中“####…”是十六进制数字的序列。应改为使用本行中描述的 Framework字符转义。
转义符【\】,说明:在后面带有不识别为转义符的字符时,与该字符匹配。例如,\*与\x2A相同。
注意:转义字符\b是一个特例。在正则表达式中,\b表示单词边界(在\w和\W之间),不过,在[]字符类中,\b表示退格符。在替换模式中,\b始终表示退格符。
替换
只在替换模式中允许替换。对于正则表达式中的类似功能,使用后向引用(如\1)。有关后向引用的详细信息,请参见反向引用和后向引用构造。
字符转义和替换是在替换模式中识别的唯一的特殊构造。下面几部分描述的所有语法构造只允许出现在正则表达式中;替换模式中不识别它们。例如,替换模式a*${txt}b会插入字符串“a*”,该字符串后跟按txt捕获组匹配的子字符串,该子字符串后跟字符串“b”(如果有)。在替换模式中,*字符不会识别为元字符。与此类似,在正则表达式匹配模式中不识别$模式。在正则表达式中,$指定字符串的结尾。
下面显示如何定义命名并编号的替换模式。
字符【$数字】,说明:替换按组号number(十进制)匹配的最后一个子字符串。
字符【${name}】,说明:替换由(?<name>)组匹配的最后一个子字符串。
字符【$$】,说明:替换单个“$”字符。
字符【$&】,说明:替换完全匹配本身的一个副本。
字符【$`】,说明:替换匹配前的输入字符串的所有文本。
字符【$'】,说明:替换匹配后的输入字符串的所有文本。
字符【$+】,说明:替换最后捕获的组。
字符【$_】,说明:替换整个输入字符串。
字符类
字符类表示一组可以匹配输入字符串的字符。组合原义字符、转义符和字符类以构成正则表达式模式。
字符类将定义字符集。一些字符类等同于一个或多个Unicode通用类别值或Unicode块。Unicode通用类别定义了字符的主要分类,即字符的类型是否为字母、十进制数字、分隔符、数学符号、标点符号,
等等。例如,Lu通用类别表示“字母,小写”,Sm类别表示“符号,数学”。有关更多信息,请参见支持的Unicode通用类别。
Unicode块是Unicode码位的命名范围。 Framework提供一组从Unicode块名称派生的命名块。例如, Framework提供IsBasicLatin命名块,其对应于Basic Latin Unicode块并且包含U+0000至U+007F范围内的字符。有关更多信息,请参见支持的命名块。
Framework支持字符类减法表达式,通过该表达式可以定义一组字符作为从一个字符类中排除另一字符类的结果。有关更多信息,请参见字符类。
字符类语法
下面总结了字符类及其语法。
字符类[character_group],说明:(正字符分组。)匹配指定字符分组内的任何字符。字符分组由串连的一个或多个原义字符、转义符、字符范围或字符类组成。例如,若要指定所有元音字母,使用[aeiou].若要指定所有标点符号和十进制数字符,使用代码[\p{P}\d]。
字符类[^character_group],说明:(负字符分组。)匹配不在指定字符分组内的任何字符。字符分组由串连的一个或多个原义字符、转义符、字符范围或字符类组成。前导符(^)是强制的,指示字符分组
为负字符分组,而不是正字符分组。例如,若要指定除元音字母以外的所有字符,使用[^aeiou].若要指定除标点符号和十进制数字符以外的所有字符,使用[^\p{P}\d]。
字符类[第一个字符-最后一个字符],说明:(字符范围。)匹配字符范围中的任何字符。字符范围是一系列连续的字符,定义的方法是:指定系列中的第一个字符,连字符(-),然后指定系列中的最后一个字符。如果两个字符具有相邻的Unicode码位,则这两个字符是连续的。可以串连两个或更多字符范围。例如,若要指定从“0”至“9”的十进制数范围、从“a”至“f”的小写字母范围,以及从“A”至“F”的大写字母范围,使用[0-9a-fA-F]。
字符类.,说明:(句点字符。)匹配除\n以外的任何字符。如果已用Singleline选项做过修改,则句点字符可与任何字符匹配。有关更多信息,请参见正则表达式选项。请注意,正字符分组或负字符分组中的句点字符(方括号内的句点)将被视为原义句点字符,而非字符类。
字符类\p{名称},说明:匹配通过名称(例如Ll、Nd、Z、IsGreek和IsBoxDrawing)指定的Unicode通用类别或命名块中的任何字符。
字符类\P{名称},说明:匹配不在名称中指定的Unicode通用类别或命名块中的任何字符。
字符类\w,说明:与任何单词字符匹配。等效于Unicode通用类别[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\
p{Lm}]。如果通过ECMAScript选项指定了符合ECMAScript的行为,则\w等效于[a-zA-Z_0-9]。
字符类\W,说明:与任何非单词字符匹配。等效于Unicode通用类别[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果通过ECMAScript选项指定了符合ECMAScript的行为,则\W等效于[^a-zA-Z_0-9]。
字符类\s,说明:与任何空白字符匹配。等效于转义符和Unicode通用类别[\f\n\r\t\v\x85\p{Z}]。如果通过ECMAScript 选项指定了符合ECMAScript的行为,则\s等效于[\f\n\r\t\v]。
字符类\S,说明:与任何非空白字符匹配。等效于转义符和Unicode通用类别[^\f\n\r\t\v\x85\p{Z}]。如果通过ECMAScript选项指定了符合ECMAScript的行为,则\S等效于[^\f\n\r\t\v]。
字符类\d,说明:与任何十进制数字匹配。对于Unicode类别的ECMAScript行为,等效于\p{Nd},对于非Unicode 类别的ECMAScript行为,等效于[0-9]。
字符类\D,说明:与任何非数字字符匹配。对于Unicode类别的ECMAScript行为,等效于\P{Nd},对于非Unicode 类别的ECMAScript行为,等效于[^0-9]。
支持的Unicode通用类别
Unicode定义了下面列出的通用类别和说明。有关更多信息,请参见Unicode Character Databa(Unicode字符数据库)处的“UCD File Format”(UCD文件格式)和“General Category Values”(通用类别值)次主题。
类别:【Lu】,说明:【字母,大写】类别:【Ll】,说明:【字母,小写】
类别:【Lt】,说明:【字母,词首字母大写】类别:【Lm】,说明:【字母,修饰符】
类别:【Lo】,说明:【字母,其他】类别:【Mn】,说明:【标记,非间距】
类别:【Mc】,说明:【标记,间距组合】类别:【Me】,说明:【标记,封闭】
类别:【Nd】,说明:【数字,十进制数】类别:【Nl】,说明:【数字,字母】
类别:【No】,说明:【数字,其他】类别:【Pc】,说明:【标点,连接符】
类别:【Pd】,说明:【标点,短划线】类别:【Ps】,说明:【标点,开始】
类别:【Pi】,说明:【标点,前引号(根据用途可能表现为类似Ps或Pe)】
类别:【Pf】,说明:【标点,后引号(根据用途可能表现为类似Ps或Pe)】
类别:【Pe】,说明:【标点,结束】类别:【Po】,说明:【标点,其他】
类别:【Sm】,说明:【符号,数学】类别:【Sc】,说明:【符号,货币】
类别:【Sk】,说明:【符号,修饰符】类别:【So】,说明:【符号,其他】
类别:【Zs】,说明:【分隔符,空白】类别:【Zl】,说明:【分隔符,行】
类别:【Zp】,说明:【分隔符,段落】类别:【Cc】,说明:【其他,控制】
类别:【Cf】,说明:【其他,格式】类别:【Cs】,说明:【其他,代理项】
类别:【Co】,说明:【其他,私用】类别:【Cn】,说明:【其他,未赋值(不存在任何字符具有此属性)】 Framework提供其他类别,用于表示一组Unicode字符类别,如下面所示。
在线汉译英类别:C,表示(所有控制字符)Cc、Cf、Cs、Co和Cn。
英语培训视频类别:L,表示(所有字母)Lu、Ll、Lt、Lm和Lo。
类别:M,表示(所有附加符号标记)Mn、Mc和Me。
类别:N,表示(所有数字)Nd、Nl和No。
类别:P,表示(所有标点)Pc、Pd、Ps、Pe、Pi、Pf和Po。
类别:S,表示(所有符号)Sm、Sc、Sk和So。
类别:Z,表示(所有分隔符)Zs、Zl和Zp。
支持的命名块
Framework提供下面列出的命名块。该组支持的命名块基于Unicode4.0和Perl5.6。
码位范围:0000-007F,块名称:IsBasicLatin
码位范围:0080-00FF,块名称:IsLatin-1Supplement
码位范围:0100-017F,块名称:IsLatinExtended-A
码位范围:0180-024F,块名称:IsLatinExtended-B
码位范围:0250-02AF,块名称:IsIPAExtensions
码位范围:02B0-02FF,块名称:IsSpacingModifierLetters
码位范围:0300-036F,块名称:IsCombiningDiacriticalMarks
码位范围:0370-03FF,块名称:IsGreek-或-IsGreekandCoptic
码位范围:0400-04FF,块名称:IsCyrillic
码位范围:0500-052F,块名称:IsCyrillicSupplement
码位范围:0530-058F,块名称:IsArmenian
码位范围:0590-05FF,块名称:IsHebrew
码位范围:0600-06FF,块名称:IsArabic
码位范围:0700-074F,块名称:IsSyriac
码位范围:0780-07BF,块名称:IsThaana
码位范围:0900-097F,块名称:IsDevanagari
码位范围:0980-09FF,块名称:IsBengali
码位范围:0A00-0A7F,块名称:IsGurmukhi
码位范围:0A80-0AFF,块名称:IsGujarati
码位范围:0B00-0B7F,块名称:IsOriya
码位范围:0B80-0BFF,块名称:IsTamil
码位范围:0C00-0C7F,块名称:IsTelugu
码位范围:0C80-0CFF,块名称:IsKannada
码位范围:0D00-0D7F,块名称:IsMalayalam
perspective是什么意思
码位范围:0D80-0DFF,块名称:IsSinhala
码位范围:0E00-0E7F,块名称:IsThai
码位范围:0E80-0EFF,块名称:IsLao
码位范围:0F00-0FFF,块名称:IsTibetan
码位范围:1000-109F,块名称:IsMyanmar
码位范围:10A0-10FF,块名称:IsGeorgian
码位范围:1100-11FF,块名称:IsHangulJamo
码位范围:1200-137F,块名称:IsEthiopic
码位范围:13A0-13FF,块名称:IsCherokee
码位范围:1400-167F,块名称:IsUnifiedCanadianAboriginalSyllabics
码位范围:1680-169F,块名称:IsOgham
码位范围:16A0-16FF,块名称:IsRunic
码位范围:1700-171F,块名称:IsTagalog
码位范围:1720-173F,块名称:IsHanunoo
码位范围:1740-175F,块名称:IsBuhid
码位范围:1760-177F,块名称:IsTagbanwa
码位范围:1780-17FF,块名称:IsKhmer
码位范围:1800-18AF,块名称:IsMongolian
码位范围:1900-194F,块名称:IsLimbu
码位范围:1950-197F,块名称:IsTaiLe
码位范围:19E0-19FF,块名称:IsKhmerSymbols
码位范围:1D00-1D7F,块名称:IsPhoneticExtensions
码位范围:1E00-1EFF,块名称:IsLatinExtendedAdditional
码位范围:1F00-1FFF,块名称:IsGreekExtended
码位范围:2000-206F,块名称:IsGeneralPunctuation
码位范围:2070-209F,块名称:IsSuperscriptsandSubscripts
码位范围:20A0-20CF,块名称:IsCurrencySymbols
码位范围:20D0-20FF,块名称:IsCombiningDiacriticalMarksforSymbols -或-IsCombiningMarksforSymbols
码位范围:2100-214F,块名称:IsLetterlikeSymbols
码位范围:2150-218F,块名称:IsNumberForms
码位范围:2190-21FF,块名称:IsArrows
码位范围:2200-22FF,块名称:IsMathematicalOperators
码位范围:2300-23FF,块名称:IsMiscellaneousTechnical
码位范围:2400-243F,块名称:IsControlPictures
码位范围:2440-245F,块名称:IsOpticalCharacterRecognition
码位范围:2460-24FF,块名称:IsEnclodAlphanumerics
码位范围:2500-257F,块名称:IsBoxDrawing
码位范围:2580-259F,块名称:IsBlockElements
码位范围:25A0-25FF,块名称:IsGeometricShapes
码位范围:2600-26FF,块名称:IsMiscellaneousSymbols
码位范围:2700-27BF,块名称:IsDingbats
码位范围:27C0-27EF,块名称:IsMiscellaneousMathematicalSymbols-A 码位范围:27F0-27FF,块名称:IsSupplementalArrows-A
码位范围:2800-28FF,块名称:IsBraillePatterns
profound是什么意思码位范围:2900-297F,块名称:IsSupplementalArrows-B
码位范围:2980-29FF,块名称:IsMiscellaneousMathematicalSymbols-B 码位范围:2A00-2AFF,块名称:IsSupplementalMathematicalOperators 码位范围:2B00-2BFF,块名称:IsMiscellaneousSymbolsandArrows
码位范围:2E80-2EFF,块名称:IsCJKRadicalsSupplement
码位范围:2F00-2FDF,块名称:IsKangxiRadicals
码位范围:2FF0-2FFF,块名称:IsIdeographicDescriptionCharacters
码位范围:3000-303F,块名称:IsCJKSymbolsandPunctuation
码位范围:3040-309F,块名称:IsHiragana
码位范围:30A0-30FF,块名称:IsKatakana
码位范围:3100-312F,块名称:IsBopomofo
码位范围:3130-318F,块名称:IsHangulCompatibilityJamo
码位范围:3190-319F,块名称:IsKanbun
码位范围:31A0-31BF,块名称:IsBopomofoExtended
码位范围:31F0-31FF,块名称:IsKatakanaPhoneticExtensions
码位范围:3200-32FF,块名称:IsEnclodCJKLettersandMonths
码位范围:3300-33FF,块名称:IsCJKCompatibility
码位范围:3400-4DBF,块名称:IsCJKUnifiedIdeographsExtensionA
码位范围:4DC0-4DFF,块名称:IsYijingHexagramSymbols
码位范围:4E00-9FFF,块名称:IsCJKUnifiedIdeographs
码位范围:A000-A48F,块名称:IsYiSyllables
码位范围:A490-A4CF,块名称:IsYiRadicals
码位范围:AC00-D7AF,块名称:IsHangulSyllables
码位范围:D800-DB7F,块名称:IsHighSurrogates
码位范围:DB80-DBFF,块名称:IsHighPrivateUSurrogates
码位范围:DC00-DFFF,块名称:IsLowSurrogates
码位范围:E000-F8FF,块名称:IsPrivateU
码位范围:F900-FAFF,块名称:IsPrivateUArea
码位范围:FB00-FB4F,块名称:IsCJKCompatibilityIdeographs
码位范围:FB50-FDFF,块名称:IsAlphabeticPrentationForms
码位范围:FE00-FE0F,块名称:IsArabicPrentationForms-A
码位范围:FE20-FE2F,块名称:IsVariationSelectors
码位范围:FE30-FE4F,块名称:IsCombiningHalfMarks
码位范围:FE50-FE6F,块名称:IsCJKCompatibilityForms
码位范围:FE70-FEFF,块名称:IsSmallFormVariants
码位范围:FF00-FFEF,块名称:IsArabicPrentationForms-B
码位范围:FFF0-FFFF,块名称:IsHalfwidthandFullwidthForms
字符类减法
一个字符类定义一组字符。字符类减法将产生一组字符,该组字符是从一个字符类中排除另一字符类中字符的结果。字符类减法表达式具有以下形式:
[ba_group-[excluded_group]]
arrange的用法方括号([])和连字符(-)是强制的。ba_group是字符类语法表中所述的正字符分组或负字符分组。excluded_group部分是另一个正字符分组或负字符分组,或者是另一个字符类减法表达式(即可以嵌套字符类减法表达式)。
例如,假设您有一个由从“a”至“z”范围内的字符组成的基本分组。若要定义除字符“m”之外的基本分组所组成的字符集,使用[a-z-[m]]。若要定义除字符集“d”、“j”和“p”之外的基本分组所组成的字符集,使用[a-z-[djp]]。若要定义除从“m”至“p”字符范围之外的基本分组所组成的字符集,使用[a-z-[m-p]].
可考虑使用嵌套字符类减法表达式,[a-z-[d-w-[m-o]]]。该表达式由最里面的字符范围向外计算。首先,在从“d”至“w”的字符范围中减去从“m”至“o”的字符范围,产生从“d”至“l”和从“p”至“w”的字符集。然后在从“a”至“z”的字符范围中减去该集合,产生字符集[abcmnoxyz]。
可以对任何字符类使用字符类减法。若要定义字符集,该字符集包括除空白字符(\s)、标点通用类别中的字符(\p{P})、IsGreek命名块中的字符(\p{IsGreek})以及Unicode NEXT LINE控制字符(\x85)之外的所有从\u0000至\uFFFF的Unicode字符,使用[\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]。
为字符类减法表达式选择将会产生有用结果的字符类。避免使用产生空字符集的表达式,这将无法匹配任何内容,同时避免使用等同于初始基本分组的表达式。例如,表达式[\p{IsBasicLatin}-[\x00-\x7F]]从IsBasicLatin通用类别中减去所有字符,其结果为空集合。类似地,表达式[a-z-[0-9]]的结果为初始基本分组。这是因为基本分组是从“a”至“z”的字母组成的字符范围,排除分组为从“0”至“9”的十进制数组成的字符范围,基本分组不包含排除分组中的任何字符。
请注意,XML Schema Regular Expressions对字符类减法的支持与此类似。
正则表达式选项
可以使用影响匹配行为的选项修改正则表达式模式。可以通过下列两种基本方法之一设置正则表达式选项:可以在Regex(pattern,options)构造函数中的options参数中指定,其中options是RegexOptions枚举值的按位“或”组合;也可以使用内联(?imnsx-imnsx:)分组构造或(?imnsx-imnsx)其他构造在正则表达式模式内设置它们。
在内联选项构造中,一个选项或一组选项前面的减号(-)用于关闭这些选项。例如,内联构造(?ix-ms)将打开IgnoreCa和IgnorePatternWhiteSpace选项而关闭Multiline和Singleline选项。默认情况下,关闭所有正则表达式选项。
下面列出了RegexOptions枚举的成员以及等效的内联选项字符。请注意,选项RightToLeft和Compiled只适用于表达式整体而不允许内联。(它们只能在Regex构造函数的options参数中指定。)选项None和ECMAScript不允许内联。
【RegexOption成员】None,【内联字符】N/A,说明:指定不设置任何选项。
【RegexOption成员】IgnoreCa,【内联字符】i,说明:指定不区分大小写的匹配。
【RegexOption成员】Multiline,【内联字符】m,说明:指定多行模式。更改^和$的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。
【RegexOption成员】ExplicitCapture,【内联字符】n,说明:指定唯一有效的捕获是显式命名或编号的(?<name>…)形式的组。这允许圆括号充当非捕获组,从而避免了由(?:…)导致的语法上的笨拙。
【RegexOption成员】Compiled,【内联字符】N/A,说明:指定正则表达式将被编译为程序集。生成该正则表达式的Microsoft中间语言(MSIL)代码;以较长的启动时间为代价,得到更快的执行速度。
【RegexOption成员】Singleline,【内联字符】s,说明:指定单行模式。更改句点字符(.)的含义,以使它与每个字符(而不是除\n之外的所有字符)匹配。
【RegexOption成员】IgnorePatternWhitespace,【内联字符】x,说明:指定从模式中排除非转义空白并启用数字符号(#)后面的注释。(有关转义空白字符的列表,请参见字符转义。)请注意,空白永远不会从字符类中消除。
【RegexOption成员】RightToLeft,【内联字符】N/A,说明:指定搜索是从右向左而不是从左向右进行的。具有此选项的正则表达式将移动到起始位置的左边而不是右边。(因此,起始位置应指定为字符串的结尾而不是开头。)为了避免构造具有无限循环的正则表达式的可能性,此选项不能在中流指定。但是,(?<)回顾后发构造提供了可用作子表达式的类似替代物。RightToLeft只更改搜索方向。它不会反转所搜索的子字符串。预测先行和回顾后发断言不改变:预测先行向右搜索;回顾后发向左搜索。
【RegexOption成员】ECMAScript,【内联字符】N/A,说明:指定已为表达式启用了符合ECMAScript的行为。此选项仅可与IgnoreCa和Multiline标志一起使用。将ECMAScript同任何其他标志一起使用将导致异常。
【RegexOption成员】CultureInvariant,【内联字符】N/A,说明:指定忽略语言中的区域性差异。有关更多信息,请参见在RegularExpressions命名空间中执行不区分区域性的操作。原子零宽度断言
下面中描述的元字符不会使引擎在字符串中前进或使用字符。它们只是根据字符串中的当前位置使匹
配成功或失败。例如,^指定当前位置在行或字符串的开头。因此,正则表达式^FTP只会返回那些在行的开头出现的字符串“FTP”的匹配项。
【断言】^,说明:指定匹配必须出现在字符串的开头或行的开头。有关更多信息,请参见正则表达式选项中的Multiline 选项。
【断言】$,说明:指定匹配必须出现在以下位置:字符串结尾、字符串结尾处的\n之前或行的结尾。有关更多信息,请参见正则表达式选项中的Multiline选项。
【断言】\A,说明:指定匹配必须出现在字符串的开头(忽略Multiline选项)。
【断言】\Z,说明:指定匹配必须出现在字符串的结尾或字符串结尾处的\n之前(忽略Multiline选项)。
【断言】\z,说明:指定匹配必须出现在字符串的结尾(忽略Multiline选项)。
【断言】\G,说明:指定匹配必须出现在上一个匹配结束的地方。与Match.NextMatch()一起使用时,此断言确保所有匹配都是连续的。
【断言】\b,说明:指定匹配必须出现在\w(字母数字)和\W(非字母数字)字符之间的边界上。匹
配必须出现在单词边界上(即出现在由任何非字母数字字符分隔的单词中第一个或最后一个字符上)。匹配也可以出现在字符串结尾处的单词边界上。
【断言】\B,说明:指定匹配不得出现在\b边界上。
限定符
限定符将可选数量的数据添加到正则表达式。限定符表达式应用于紧挨着它前面的字符、组或字符类。 Framework 正则表达式支持最小匹配(lazy)限定符。下面描述了影响匹配的元字符。数量n和m是整数常数。
【限定符】*,说明:指定零个或更多个匹配;例如\w*或(abc)*。等效于{0,}。
【限定符】+,说明:指定一个或多个匹配;例如\w+或(abc)+。等效于{1,}。
不可能的英文【限定符】?,说明:指定零个或一个匹配;例如\w?或(abc)?。等效于{0,1}。
世博英语【限定符】{n},说明:指定恰好n个匹配;例如(pizza){2}。
【限定符】{n,},说明:指定至少n个匹配;例如(abc){2,}。
【限定符】{n,m},说明:指定至少n个但不多于m个匹配。
【限定符】*?,说明:指定尽可能少地使用重复的第一个匹配(等效于lazy*)。
【限定符】+?,说明:指定尽可能少地使用重复但至少使用一次(等效于lazy+)。
【限定符】??,说明:指定使用零次重复(如有可能)或一次重复(lazy?)。
【限定符】{n}?,说明:等效于{n}(lazy{n})。
【限定符】{n,}?,说明:指定尽可能少地使用重复但至少使用n次(lazy{n,})。
【限定符】{n,m}?,说明:指定介于n次和m次之间、尽可能少地使用重复(lazy{n,m})。分组构造
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。下面描述了正则表达式分组构造。
【分组构造】(子表达式),说明:捕获匹配的子表达式(或非捕获组;有关更多信息,请参见正则表达式选项中的ExplicitCapture选项)。使用()的捕获基于左括号按顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。
【分组构造】(?<name>子表达式),说明:将匹配的子表达式捕获到一个组名称或编号名称中。用于name的字符串不得包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如(?'name')。
【分组构造】(?<name1-name2>子表达式),说明:(平衡组定义。)删除先前定义的name2组的定义,并在name1组中存储先前定义的name2组和当前组之间的间隔。如果未定义name2组,则匹配将回溯。由于删除name2的最后一个定义会显示name2的先前定义,因此该构造允许将name2组的捕获堆栈用作计数器,用于跟踪嵌套构造(如括号)。在此构造中,name1是可选的。可以使用单引号替代尖括号,例如(?'name1-name2')。
有关更多信息,请参见本主题中的示例。
【分组构造】(?:子表达式),说明:(非捕获组。)不捕获由子表达式匹配的子字符串。
【分组构造】(?imnsx-imnsx:子表达式),说明:应用或禁用子表达式中指定的选项。例如,(?i-s:)将打开不区分大小写并禁用单行模式。有关更多信息,请参见正则表达式选项。
【分组构造】(?=子表达式),说明:(零宽度正预测先行断言。)仅当子表达式在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d)与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。
【分组构造】(?!子表达式),说明:(零宽度负预测先行断言。)仅当子表达式不在此位置的右侧匹配时才继续匹配。例如,\b(?!un)\w+\b与不以un开头的单词匹配。
【分组构造】(?<=子表达式),说明:(零宽度正回顾后发断言。)仅当子表达式在此位置的左侧匹配时才继续匹配。例如,(?<=19)99与跟在19后面的99的实例匹配。此构造不会回溯。
【分组构造】(?<!子表达式),说明:(零宽度负回顾后发断言。)仅当子表达式不在此位置的左侧匹配时才继续匹配。
【分组构造】(?>子表达式),说明:(非回溯子表达式(也称为“贪婪”子表达式)。)该子表达式仅完全匹配一次,然后就不会逐段参与回溯了。(也就是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配。)默认情况下,如果匹配未成功,回溯会搜索其他可能的匹配。如果已知无法成功回溯,可以使用非回溯子表达式避免不必要的搜索,从而提高性能。命名捕获基于左括号按从左到右的顺序依次编号(与非命名捕获类似),但在对所有非命名捕获进行计数之后才开始对命名捕获编号。例如,模式((?<One>abc)/d+)?(?<Two>xyz)(.*)按编号和名称产生下列捕获组。(编号为0的第一个捕获总是指整个模式)。
编号名称模式
00(默认名称)((?<One>abc)/d+)?(?<Two>xyz)(.*)
品种英文11(默认名称)((?<One>abc)/d+)
22(默认名称)(.*)
31(?<One>abc)
42(?<Two>xyz)
平衡组定义示例
下面的代码示例演示使用平衡组定义匹配输入字符串中的左右尖括号(<>)。在该示例中,像使用堆栈那样使用Open组和Clo组的捕获集合来跟踪尖括号配对:将所捕获的各左尖括号放入Open组的捕获集合中;将所捕获的各右尖括号放入Clo组的捕获集合中;平衡组定义确保每个左尖括号均有一个匹配的右尖括号。
over the moon
'This code example demonstrates using the balancing group definition feature of
'regular expressions to match balanced left angle bracket(<)and right angle
'bracket(>)characters in a string.
Imports System
Imports System.Text.RegularExpressions
Class Sample
Public Shared Sub Main()
'The following expression matches all balanced left and right angle brackets(<>).
'The expression:
utilities'1)Matches and discards zero or more non-angle bracket characters.
'2)Matches zero or more of:
'2a)One or more of:
'2a1)A group named"Open"that matches a left angle bracket,followed by zero
'or more non-angle bracket characters.
'"Open"esntially counts the number of left angle brackets.
'2b)One or more of:
'2b1)A balancing group named"Clo"that matches a right angle bracket,
'followed by zero or more non-angle bracket characters.
'"Clo"esntially counts the number of right angle brackets.
'3)If the"Open"group contains an unaccounted for left angle bracket,the

本文发布于:2023-05-25 22:49:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/776338.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符   匹配   说明   指定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图