<HTML><HEAD><TITLE>Tcl教程</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<LINK href="ssdn.css" tppabs="http://blueant.nease.net/scriptnet/ssdn/ssdn.css" rel=stylesheet>
<SCRIPT language=JavaScript>
function layerShow(id) { return true;}
function slowHide() { return true;}
function preloadImg(file) {
img = new Image();
img.src = "image/" + file + ".gif";
}
function imgUp(img) {
document.images[img].src = "../../image/" + img + "_w.gif";
}
function imgDown(img) {
document.images[img].src = "../../image/" + img + ".gif";
}
preloadImg("up_home");
preloadImg("up_home_w");
</SCRIPT>
</HEAD>
<BODY>
<a name="Top"></a>
<!--{{SCRIPTNET_TITLE-->
<TABLE height=52 cellSpacing=0 cellPadding=0 width="100%" background="up_bg.jpg" tppabs="http://blueant.nease.net/scriptnet/ssdn/image/up_bg.jpg" border=0>
<TBODY>
<TR>
<TD width=140><IMG height=52 src="logo.gif" tppabs="http://blueant.nease.net/scriptnet/ssdn/image/logo.gif" width=140></TD>
<TD> </TD>
<TD vAlign=center align=middle width=54>
<TABLE height=24 cellSpacing=0 cellPadding=0 width=24 border=0>
<TBODY>
<TR>
<TD width=46><A onmouseover="imgUp('up_home');" onmouseout="imgDown('up_home');"
href="javascript:if(confirm('http://blueant.nease.net/scriptnet/ssdn/index.htm \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://blueant.nease.net/scriptnet/ssdn/index.htm'" tppabs="http://blueant.nease.net/scriptnet/ssdn/index.htm"><IMG
height=24 alt="起始页面" src="up_home.gif" tppabs="http://blueant.nease.net/scriptnet/ssdn/image/up_home.gif" width=46 border=0 name=up_home></A></TD>
<TD width=11><IMG height=24 src="up_plus.gif" tppabs="http://blueant.nease.net/scriptnet/ssdn/image/up_plus.gif" width=11></TD>
</TR></TBODY>
</TABLE>
</TD>
</TR></TBODY>
</TABLE>
<!--SCRIPTNET_TITLE}}-->
<h3>
<font size="2" color="#000080">
<a href="tcl_train.htm" tppabs="http://blueant.nease.net/scriptnet/ssdn/tcl/tcl_train.htm">TCL语言教程</a>
> 字符串操作 > regexp命令</font></h3>
<p>
<FONT SIZE="2" color="#000080">语法:regexp ?switchs? ?--? exp string ?matchVar?\ ?subMatchVar subMatchVar...?
<br>
regexp命令用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0。 </FONT></p>
<P><FONT SIZE="2" color="#000080">在正规表达式中,一些字符具有特殊的含义,下表一一列出,并给予了解释。 <br>
</FONT><TABLE BORDER="1" CELLSPACING="0" CELLPADDING="2" style="border-collapse: collapse" bordercolor="#111111">
<TR>
<TD WIDTH="129" ALIGN="LEFT" VALIGN="TOP" bgcolor="#FF99FF"> <b>
<font size="2">字符</font></b></TD>
<TD WIDTH="744" ALIGN="LEFT" VALIGN="TOP" bgcolor="#FF99FF"><b>
<font size="2">意义</font></b></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<FONT FACE="黑体" size="2" color="#000080"> <B> .</B></FONT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">匹配任意单个字符</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">^</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">表示从头进行匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">$</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">表示从末尾进行匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">\x</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">匹配字符x,这可以抑制字符x的含义</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">[chars]</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">匹配字符集合chars中给出的任意字符,如果chars中的第一个字符是^,表示匹配任意不在chars中的字符,chars的表示方法支持a-z之类的表示。</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">(regexp)</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">把regexp作为一个单项进行匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">*</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">对*前面的项0进行次或多次匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">+</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">对+前面的项进行1次或多次匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">?</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">对?前面的项进行0次或1次匹配</font></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<font size="2" color="#000080">regexp1|regexp2</font></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<font size="2" color="#000080">匹配regexp1或regexp2中的一项</font></TD></TR>
</TABLE>
<P><FONT SIZE="2" color="#000080">下面的一个例子是从《Tcl and Tk ToolKit》中摘下来的,下面进行说明: </FONT>
<P><font size="2" color="#000080">^((0x)?[0-9a-fA-F]+|[0-9]+)$ </font>
<P><FONT SIZE="2" color="#000080">这个正规表达式匹配任何十六进制或十进制的整数。 </FONT>
<P><FONT SIZE="2" color="#000080">两个正规表达式以|分开(0x)?[0-9a-fA-F]+和[0-9]+,表示可以匹配其中的任何一个,事实上前者匹配十六进制,后者匹配的十进制。 </FONT>
<P><FONT SIZE="2" color="#000080">^表示必须从头进行匹配,从而上述正规表达式不匹配jk12之类不是以0x或数字开头的串。 </FONT>
<P><FONT SIZE="2" color="#000080">$表示必须从末尾开始匹配,从而上述正规表达式不匹配12jk之类不是数字或a-fA-F结尾的串。 </FONT>
<P><FONT SIZE="2" color="#000080">下面以(0x)?[0-9a-fA-F]+ 进行说明,(0x)表示0x一起作为一项,?表示前一项(0x)可以出现0次或多次,[0-9a-fA-F]表示可以是任意0到9之间的单个数字或a到f或A到F之间的单个字母,+表示象前面那样的单个数字或字母可以重复出现一次或多次。 </FONT>
<P><font size="2" color="#000080">% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} ab
<br>
1 <br>
% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 0xabcd <br>
1 <br>
% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 12345 <br>
1 <br>
% regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 123j <br>
0 </font>
<P><font color="#000080"><FONT SIZE="2">如果</FONT><font size="2">regexp</font><FONT SIZE="2">命令后面有参数matchVar和subMatchVar,则所有的参数被当作变量名,如果变量不存在,就会被生成。 </FONT>
<font size="2">regexp</font><FONT SIZE="2">把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给第二个变量,依次类推,例如: </FONT>
</font>
<P><font size="2" color="#000080">% regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word
<br>
1 <br>
% puts " $total ,$num,$word" <br>
100 apples ,100,apples </font>
<P><FONT SIZE="2" color="#000080">regexp可以设置一些开关(switchs〕,来控制匹配结果:</FONT><TABLE BORDER="1" CELLSPACING="0" CELLPADDING="2" style="border-collapse: collapse" bordercolor="#111111">
<TR>
<TD WIDTH="129" ALIGN="LEFT" VALIGN="TOP" bgcolor="#FF99FF"> <b>
<font size="2">开关</font></b></TD>
<TD WIDTH="744" ALIGN="LEFT" VALIGN="TOP" bgcolor="#FF99FF"><b>
<font size="2">意义</font></b></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<FONT SIZE="2" color="#000080">-<b>nocase</b></FONT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" width="744">
<FONT SIZE="2" color="#000080">匹配时不考虑大小写</FONT></TD></TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP" width="129">
<FONT SIZE="2" color="#000080