匹配正则表达式以及搜索替换字符串的特殊字符
- 更新时间2025-08-27
- 阅读时长14分钟
正则表达式需使用特殊字符组合来匹配模式。正则表达式用于匹配或定位字符串的一部分或其子集。例如,使用正则表达式可匹配代码串中的某个变量或报告中的某个特定值。
正则表达式的支持由PCRE库软件包提供。关于再次分发PCRE许可证的信息,请查看<National Instruments>\_Legal Information目录中内容。
关于Perl兼容正则表达式的详细信息,请访问www.pcre.org网站的Perl 5 Regular Expression文档。
正则表达式和搜索字符串输入的特殊字符
下表所列的特殊字符适用于“匹配正则表达式”函数的正则表达式输入端和“搜索替换字符串”函数的搜索字符串输入端。如需在“搜索替换字符串”函数中使用特殊字符,右键单击该函数并从快捷菜单中选择正则表达式。
|
注:下列特殊字符只适用于“匹配正则表达式”和“搜索替换字符串”函数。“匹配模式”函数使用另一套数量较少的正则表达式,但执行速度比“匹配正则表达式”函数快。关于“匹配模式”函数所用正则表达式的详细信息,见匹配模式的特殊字符 主题。 |
| 特殊字符 | 说明 | 范例 |
|---|---|---|
| .(句点) | 匹配除新行符之外的任何单个字符。如置于方括号内,.表示文本句点。 | 输入字符串:Welcome to LabVIEW.正则表达式:t....匹配:to La如输入[z.]作为正则表达式,句点将被视为文本,该表达式匹配.或z。本例中,如输入[z.],返回的匹配值是.。 |
| * | 将该限定符前的任一字符、字符组或字符类标记为一个模式,在输入字符串中出现0次或以上。由于星号标记可匹配出现0次的模式,因此,如果整个模式使用星号标记,正则表达式可能会返回一个空字符串。该限定符默认匹配尽可能多的字符。 | 输入字符串:Hello LabVIEW!正则表达式:el*匹配:ell诸如w*或(welcome)*的表达式在函数未找到其他匹配的情况下会匹配一个空字符串。 |
| + | 将该限定符前的任一字符、字符组或字符类标记为一个模式,在输入字符串中出现1次或以上。该限定符默认匹配尽可能多的字符。 | 输入字符串:Hello LabVIEW!正则表达式:el+匹配:ell |
| ? | 将该限定符前的任一字符、字符组或字符类标记为一个模式,在输入字符串中出现0次或1次。该限定符默认匹配尽可能多的字符。如紧跟着其他限定符使用,?用于修饰该限定符,以返回尽可能少的匹配。可修饰的限定符有*、+和{}等。 | 输入字符串:Hello LabVIEW!正则表达式:el?匹配:el输入字符串:<ul><li>Hello</li><li>LabVIEW</li></ul>正则表达式:<li>.+?</li>匹配:<li>Hello</li>第二例中,如删除正则表达式中的?,新匹配将为<li>Hello</li><li>LabVIEW</li>。原因是+默认匹配尽可能多的字符,除非在+后紧跟着使用?。该正则表达式可用于匹配任意<li></li>标记对内的字符串。 |
| {n,N} | 将该限定符前的任一字符、字符组或字符类标记为一个模式,在输入字符串中出现指定的次数。其中n表示最小次数,N表示最大次数。此外,也可单独指定一个数字。如指定的是一个范围,则该限定符匹配尽可能大的次数。 | 输入字符串:<ul><li>Hello</li><li>Lab</li><li>VIEW</li><li>!</li></ul>正则表达式:(<li>.+?</li>){2}匹配:<li>Hello</li><li>Lab</li><li>输入字符串:<ul><li>Hello</li><li>Lab</li><li>VIEW</li><li>!</li></ul>正则表达式:(<li>.+?</li>){1,3}匹配:<li>Hello</li><li>Lab</li><li>VIEW</li>在第二个范例中,最小的匹配为1,最大值为3。因为该正则表达式尽可能匹配指定范围的最大值,因此此处返回3个匹配。 |
| [] | 用于创建字符类,可匹配指定字符集合中的任一字符。例如[abc]可匹配a、b、c。使用-可指定一个字符范围。例如,[a-z]可匹配任意一个小写字母。“匹配正则表达式”和“搜索替换字符串”函数将置于方括号内的特殊字符转义为文本,但^、-和\三者除外。 | 输入字符串:version=14.0.1正则表达式:[0-9]+(\.[0-9]+)*匹配:14.0.1表达式[0-9]匹配任一数字。加号匹配其前面的字符类,即 [0-9],在输入字符串中出现1次及以上,但尽可能多次。括号创建了一个字符组,形成一个子匹配,由.字符和其后的所有数字构成。表达式\.匹配文本字符.。加号匹配其前面的字符类,即 [0-9],在输入字符串中出现1次及以上,但尽可能多次。星号匹配其前面的字符组,即(\.[0-9]+),在输入字符串中出现0次或以上,因此即使输入中没有.,该表达式仍可匹配整数。使用该正则表达式可匹配任何整数、小数、序列号、IPv4地址或其他由.分隔的数列。 |
| () | 用于创建字符组,可匹配指定的整个字符集合。如其后紧跟有一个限定符,则该限定符限定整个字符组。用括号可创建多个子匹配,每个字符组返回一个子匹配。如将一个字符组嵌套在另一个字符组内,正则表达式将先为外层的字符组创建子匹配。扩展“匹配正则表达式”函数节点可访问子匹配输出。此外,可在表达式中使用反向引用来指代前面已创建的子匹配。关于在正则表达式中使用后向引用的详细信息,见后向引用一节。 | 输入字符串:Hello LabVIEW!正则表达式:(el.)..(L..)匹配:ello Lab子匹配1:ell子匹配2:Lab输入字符串:Hello LabVIEW!正则表达式:(.(el.).).(L..)匹配:Hello Lab子匹配1:Hello子匹配2:ell子匹配3:Lab |
| | | 用于分隔可能的匹配。使用该字符便于从多个字符组中得到任意一组匹配。包含(|)的正则表达式返回函数在输入字符串中找到的第一个匹配,而不论可能匹配排列的顺序如何。例如,输入the dog chased the cat,使用正则表达式dog|cat和cat|dog均返回相同的匹配dog。 | 输入字符串:value=FALSE total=12.34 token=TRUE正则表达式:(value|token)=(TRUE|FALSE)匹配:value=FALSE子匹配1:value子匹配2:FALSE正则表达式返回输入字符串中找到的第一个可能匹配。如果输入字符串中token=TRUE出现在value=FALSE之前,则正则表达式将匹配value=FALSE。 |
| ^ | 作为模式的开始字符时,从字符串的起始处开始匹配。如设置“匹配正则表达式”或“搜索替换字符串”函数的多行?输入端为TRUE,^使用当前平台的行结束从字符串内各行起始处开始匹配。此外,通过在字符类的起始位置添加^,可匹配不属于指定字符集的任意字符。例如,[^0-9]匹配任意非数字字符。[^a-zA-Z0-9]匹配非小写、大写字母以及数字的字符。 | 输入字符串:Hello LabVIEW!正则表达式:^[^]+匹配:Hello该正则表达式自输入字符串起始处起,匹配除空格符外的尽量多的字符。使用该表达式可分隔字符串的首词、首数字或其他首字符组合。输入字符串:Hello LabVIEW正则表达式:^LabVIEW匹配:LabVIEW该正则表达式只有在多行?设为TRUE时匹配LabVIEW。 |
| $ | 作为模式的结尾字符时,从字符串的末尾开始匹配。如设置“匹配正则表达式”或“搜索替换字符串”函数的多行?输入端为TRUE,$使用当前平台的行结束从字符串内各行末尾处开始匹配。 | 输入字符串:Hello LabVIEW!正则表达式:[^]+$匹配:LabVIEW!该正则表达式自输入字符串末尾处起,匹配除空格符外的尽量多的字符。使用该表达式可分隔字符串的尾词、尾数字或其他尾字符组合。输入字符串:Hello LabVIEW正则表达式:Hello$匹配:Hello该正则表达式只有在多行?设为TRUE时匹配Hello。 |
| \ | 取消紧跟着反斜杠的特殊字符的特殊含义,而匹配其文本字符。下列转义表达式的含义如下:
|
输入字符串:total=$12.34正则表达式:\$\d+(\.\d{2})?匹配:$12.34由于反斜杠取消了其特殊含义,表达式\$匹配实际的美元符号。表达式\d+匹配尽量多的数字,且至少匹配1个数字。表达式(\.\d{2})?匹配.和2个数字,但?标记使这部分表达式在匹配中变得可选。使用此正则表达式可匹配任何用.字符作为小数分隔符的美元价格。在使用其他字符作为小数分隔符的区域则需酌情调整此正则表达式。输入字符串:NEWtoken=FALSE token=TRUE checkFile=TRUE total=12.34正则表达式:\btoken=\w+\s\b\S*匹配:token=TRUE checkFile=TRUE该正则表达式不匹配NEWtoken=FALSE中的token=FALSE,因为\b标记了该正则表达式只匹配token=位于词首的字符串。表达式\w+匹配尽量多的单词字符,且至少匹配1个。本例中,\w+匹配TRUE。表达式\s匹配一个空格符。表达式\b\S*匹配词首处的全部非空白字符直到函数找到下一个空白字符为止。本例中,\b\S*匹配checkFile=TRUE。输入字符串:Welcome to LabVIEW!正则表达式:come\n\S*\t\w*\x21匹配:come to LabVIEW!表达式come\n匹配后接换行符的文本字母come。表达式\S*匹配尽量多的非空白字符,即本例中的to。表达式\t匹配to和LabVIEW!之间的制表符。表达式\w*匹配尽量多的单词字符,即本例中的LabVIEW。表达式\x21匹配感叹号,因为21是感叹号的十六进制编号。 |
|
提示:如需在字符串的开始和结尾处进行匹配,可在模式的第一个字符前添加^,并在模式的最后一个字符后添加$。例如,^LabVIEW$在字符串LabVIEW中匹配LabVIEW,但在字符串LabVIEW或Hello LabVIEW中却无匹配。模式中如既指定了字符串的开始,又指定了字符串的结尾,则相当于对整个字符串进行匹配。 |
替换字符串输入的特殊字符
“搜索替换字符串”函数的替换字符串输入端适用下列特殊字符。
| 特殊字符 | 说明 | 范例 |
|---|---|---|
| $n或${n} | 在指定的子匹配之前或之后插入字符串。关于如何在“搜索替换字符串”函数的替换字符串输入端使用后向引用的详细信息,见下一节反向引用。如正则表达式中存在9个以上的子匹配,且要在第9个之后引用子匹配,请使用$n。$12仅会插入第一个子匹配,因为该函数只读取紧随$之后的第一个数字。但是,如输入${12}则将插入第12个子匹配。 | 输入字符串:Welcome LabVIEW搜索字符串:(LabVIEW)替换字符串:to $1!结果字符串:Welcome to LabVIEW!输入字符串:Welcome to the LabVIEW Help!搜索字符串:We(l)(co(m)e)((to)(t(he) (Lab)(VIE(W)) He(lp)(!)替换字符串:$7${11}ful${12}结果字符串:helpful! |
| \$n | 取消替换字符串中任何特殊字符的转义。 | 输入字符串:total=123 per day搜索字符串:(\d+)(per \w*)?替换字符串:\$1$2结果字符串:total=$123 per day本例中,\$用于插入文本字符$。\\用于表示文本的反斜杠。 |
反向引用
使用反向引用,可在同一正则表达式中指代已出现的子匹配。首先,使用字符组在表达式中创建一个子匹配。然后通过后向引用,在表达式的后面部分指代该子匹配。
在“匹配正则表达式”函数的正则表达式或“搜索替换字符串”函数的搜索字符串输入端中,如要指定后向引用,应使用\1指代第一个子匹配,\2指代第二个子匹配,并依此类推。例如,思考下列正则表达式:
(["*$])(\w+)\1\2\1
第一个字符组包含一个匹配 "、*,或$的字符类。第二个字符组匹配一个及以上的单词字符。第一个反向引用(即\1)与第一个字符组(即(["*$]))返回相同的子匹配。第二个反向引用(即\2)与第二个字符组(即(\w+))返回相同的子匹配。第三个反向引用(即\1)与第一个反向引用相同,返回的子匹配也与第一个字符组相同。
本例可匹配诸如"foo"foo"、*bar*bar*和$baz$baz$等字符串,但不可匹配"foo$foo"或"foo*bar"等字符串。
在替换字符串输入端使用后向引用
如果“搜索替换字符串”函数启用了正则表达式,则可在替换字符串输入端中使用后向引用,来指代搜索字符串输入端中的子匹配。使用$1来指代第一个子匹配,$2指代第二个子匹配,并依此类推。这些特殊字符只适用于“搜索和替换字符串”函数的替换字符串输入端。其作用是在指定的子匹配之前或之后插入特定的字符串。请参考以下范例:
输入字符串:$value "TRUE"TRUE" *NULL搜索字符串:(["*$])(\w+)\1\2\1替换字符串:$1$2value$1结果字符串:$value "TRUEvalue" *NULL
本例中,替换字符串输入端中的反向引用$1指代搜索字符串中的第一个子匹配。同样地,后向引用$2指代搜索字符串中的第二个子匹配。