正则表达式需使用特殊字符组合来匹配模式。正则表达式用于匹配或定位字符串的一部分或其子集。例如,使用正则表达式可匹配代码串中的某个变量或报告中的某个特定值。

注: “匹配正则表达式”和“搜索替换字符串”函数不支持字符串中包含空字符。另外,正则表达式可返回空字符串的成功匹配。如一个正则表达式没有返回成功匹配,匹配后偏移量将返回–1。

正则表达式的支持由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]可匹配abc。使用-可指定一个字符范围。例如,[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|catcat|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
\ 取消紧跟着反斜杠的特殊字符的特殊含义,而匹配其文本字符。下列转义表达式的含义如下:
  • \b - 表示单词的边界。单词边界是紧挨着单词的一个字符,但单词边界并不是“单词字符”(构成单词的字符)。“单词字符”是字母/数字字符或者下划线(_)。例如,\bhat匹配hatchet中的hat,但不匹配that中的hat。hat\b匹配that中的hat,但不匹配hatchet中的hat。\bhat\b匹配hat中的hat,但不匹配thathatchet中的hat。
  • \c - 匹配任何控件或非打印字符,包括字符集中任何不代表书面符号的代码点。
  • \w - 匹配任意“单词字符”;等同于[a-zA-Z0-9_]
  • \w - 匹配任意“非单词字符”;等同于[^a-zA-Z0-9_]
  • \d - 匹配任意数字字符;等同于[0-9]
  • \D - 匹配任意非数字字符;等同于[^0-9]
  • \N - 匹配同一正则表达式中该限定符前出现的子匹配之一,其中N为一个数字。关于如何使用\N的详细信息,见反向引用一节
  • \s - 匹配任意空白字符;包括空格、换行、制表符、回车等等
  • \S - 匹配任意非空白字符
  • \n - 匹配换行符
  • \t - 匹配制表符
  • \r - 匹配回车符
  • \f - 匹配换页符
  • \031 - 匹配八进制字符(在本例中是八进制的31
  • \x3F - 匹配十六进制字符(在本例中是十六进制的3F
输入字符串: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匹配toLabVIEW!之间的制表符。表达式\w*匹配尽量多的单词字符,即本例中的LabVIEW。表达式\x21匹配感叹号,因为21是感叹号的十六进制编号。
提示:如需在字符串的开始和结尾处进行匹配,可在模式的第一个字符前添加^,并在模式的最后一个字符后添加$。例如,^LabVIEW$在字符串LabVIEW中匹配LabVIEW,但在字符串LabVIEWHello 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指代搜索字符串中的第二个子匹配。