正则表达式测试器下载(网页版):http://www.forta.com/books/0672325667/
你也可以新建一个文本文件,然后复制本文最后附加的网页代码到文件,文件名后缀修改为“.html”,双击运行即可。
一.什么是正则表达式?
简
单地说,正则表达式就是一些用来匹配和处理文本的字符串。正则表达式是用正则表达式语言创建的。与其他程序设计语言一样,正则表达式语言也有需要学习的特
殊语法和指令。但是,正则表达式语言并不是一种完备的程序设计语言,它甚至算不上是一种能够直接安装并运行的程序。准确地说,正则表达式语言是内置于其他
语言或软件产品里的“迷你”语言。
正则表达式的使用方法和具体功能,在不同的应用程序/语言中各有不同。一般来说,应用程序大多使用菜单选项和对
话框来访问正则表达式,而程序设计语言大都在函数或对象类中使用正则表达式。此外,并非所有的正则表达式实现都是一样的。在不同的应用程序/语言里,正则
表达式的语法和功能往往会有明显(有时也不那么明显)的差异。
二.以例子说明正则表达式的语法和功能
进行操作的文本对象:
hello,my name is xyf.who are you?
regex.txt
segex.txt
megex.txt
reg1.txt
reg2.txt
rega.txt
regz.txt
正则表达式操作:
1.匹配纯文本
:xyf
结果:
Match Position Length
xyf 17 3
2.匹配任意字符
:.e或者.e.
结果:(1)
Match Position Length
he 0 2
me 11 2
re 26 2
re 34 2
ge 36 2
se 44 2
ge 46 2
re 54 2
re 63 2
re 72 2
re 81 2
(2)
Match Position Length
hel 0 3
me 11 3
re 26 3
reg 34 3
seg 44 3
reg 54 3
reg 63 3
reg 72 3
reg 81 3
注:符号.能匹配除换行符以外的任意一个符号,包括自己本身。
如果你曾经使用过DOS的文件搜索功能,你将发现正则表达式里的.字符相当于DOS的?字符。SQL用户将注意到正则表达式里的.字符相当于SQL中_(下划线)字符。
3.匹配特殊字符
:e./.txt
结果:
Match Position Length
ex.txt 37 6
ex.txt 47 6
注:由于一些特殊的符号在正则表达式中被赋予了特殊的专用功能,所以如果要在文本中匹配这个符号本身的话就必须用转义符/,如果我们换个正则表达式e..那么结果会是什么呢?如下:
Match Position Length
ell 1 3
e i 12 3
e y 27 3
ege 35 3
ege 45 3
ege 55 3
eg1 65 3
eg2 74 3
ega 83 3
egz 92 3
如果需要搜索/本身,就必须对/字符进行转义,相应的转义序列是两个连续的反斜杠字符//
4.匹配多个字符中的某一个
:[rms]egex.txt
结果:
Match Position Length
regex.txt 34 9
segex.txt 44 9
megex.txt 54 9
5.利用字符集合区间
:reg[1-9a-z]/.txt
结果:
Match Position Length
reg1.txt 64 8
reg2.txt 73 8
rega.txt 82 8
regz.txt 91 8
如果换作reg[1-9]./txt则结果为:
Match Position Length
reg1.txt 64 8
reg2.txt 73 8
6.取非匹配
:reg[^1-9].txt
结果:
Match Position Length
rega.txt 82 8
regz.txt 91 8
注:^的效果将作用于给定字符集合里的所有字符或者字符区间,而不是仅限于跟在^字符后面的那一个字符或者字符区间。
在这个正则表达式测试器中默认是不区分大小写的。如果测试器默认区分大小写的话,比如在文本中有regex.txt和Regex.txt,你可以用[R|r]egex.txt或者[Rr]egex.txt来匹配。
(未完待续)
附(正则表达式测试器网页代码):
<HTML>
<HEAD>
<TITLE>Regular Expression Test Page</TITLE>
<!--- Some styles to make the page look nice --->
<STYLE>
BODY {font-family:arial;font-size:12px}
INPUT {font-size:11px}
TEXTAREA {font-size:11px}
TH {background:#8888FF;color:white;text-align:left}
TD {background:#CCCC99;color:black;font-size:12px}
TD.RowA {background:#CCCC99}
TD.RowB {background:#EEEEBB}
.header {font-weight:bold}
</STYLE>
<SCRIPT LANGUAGE="JavaScript">
// Turn off fields used only by replace
function hideReplaceFields() {
document.getElementById('RegExReplace').disabled=true;
document.getElementById('replaceheader').disabled=true;
}
// Turn on fields used only by replace
function showReplaceFields() {
document.getElementById('RegExReplace').disabled=false;
document.getElementById('replaceheader').disabled=false;
}
// Perform a find
function processRegexFind(text, regex, flags) {
var reg = new RegExp(regex, flags);
var lastIdx = -1;
var iCount = 0;
var result = "";
var output = '<DIV STYLE="height:200px;overflow-y:auto;width:550">' +
'<TABLE BORDER="0" CELLPADDING="2" CELLSPACING="0" WIDTH="550">' +
'<TR><TH WIDTH="*">Match</TH><TH
WIDTH="50">Position</TH><TH
WIDTH="50">Length</TH></TR>';
// Loop as long as have matches
while (lastIdx != 0)
{
// Do it
var mtch = reg.exec(text);
// Check if got one
if (reg.lastIndex != 0)
{
// Yep, increment counter
iCount++;
if (iCount % 2)
style = "RowA";
else
style = "RowB";
// Write output
output += '<TR CLASS="' + style + '"><TD>' +
RegExp.lastMatch + "</TD><TD>" +
(reg.lastIndex-RegExp.lastMatch.length) + "</TD><TD>" +
RegExp.lastMatch.length + "</TD></TR>";
}
lastIdx = reg.lastIndex;
}
output += "</TABLE>";
// Build result
if (iCount != 0)
result = "Matches Found: " + iCount+ "<BR>" + output;
else
result = "No matches";
return result;
}
// Process a replace
function processRegexReplace(text, regexfind, regexreplace, flags) {
// Define regex
var re = new RegExp (regexfind, flags) ;
// Do it
var newstr = text.replace(re, regexreplace) ;
// Generate output
var result = '<DIV STYLE="height:200px;overflow-y:auto;width:550">' +
'<TABLE BORDER="0" CELLPADDING="2" CELLSPACING="0" WIDTH="550">' +
'<TR><TH>New Text</TH></TR><TR><TD>' +
newstr + '</TD></TR>';
return result;
}
// Process entry point
function processRegex(form) {
var output="";
var flags;
if (form.CaseSensitive.checked)
flags = "g";
else
flags = "gi";
// What to do?
if (form.OperationFind.checked) {
output=processRegexFind(form.SearchText.value, form.RegEx.value, flags);
}
else if (form.OperationReplace.checked) {
output=processRegexReplace(form.SearchText.value, form.RegEx.value, form.RegExReplace.value, flags);
}
document.getElementById('output').innerHTML=output;
return false;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="tester" ACTION="" METHOD="post" onSubmit="processRegex(this);return false">
<TABLE BORDER="1" CELLPADDING="4" CELLSPACING="0" WIDTH="550">
<TR>
<TH CLASS="Dialog">Regular Expression Tester</TH>
</TR>
<TR>
<TD CLASS="Dialog">
<!--- Text input for the regular expression itself --->
<SPAN CLASS="header">Enter a regular expression:</SPAN><BR>
<INPUT NAME="RegEx" TYPE="Text" SIZE="65" STYLE="font-size:13px">
<!--- Checkbox to control case-sensitivity --->
<INPUT TYPE="Checkbox" NAME="CaseSensitive" ID="CaseSensitive" VALUE="Yes">
<LABEL FOR="CaseSensitive">Case sensitive</LABEL>
<BR>
<!--- Radio buttons to display find vs. replace --->
<INPUT TYPE="Radio" NAME="Operation" ID="OperationFind" VALUE="find" CHECKED onClick="hideReplaceFields()">
<LABEL FOR="OperationFind">Find</LABEL>
<INPUT TYPE="Radio" NAME="Operation" ID="OperationReplace" VALUE="replace" onClick="showReplaceFields()">
<LABEL FOR="OperationReplace">Replace</LABEL>
<BR>
<!--- Text input for the replace regular expression --->
<SPAN CLASS="header" ID="replaceheader">Enter the replace regular expression:</SPAN><BR>
<INPUT ID="RegExReplace" NAME="RegExReplace" TYPE="Text" SIZE="65" STYLE="font-size:13px">
<BR><BR>
<!--- Textarea where user can type the text to search --->
<SPAN CLASS="header">And the text you wish to search:</SPAN><BR>
<TEXTAREA NAME="SearchText" WRAP="off" COLS="70" ROWS="6"></TEXTAREA>
<BR>
<!--- Submit button to start the search --->
<INPUT NAME="Submit" TYPE="Submit" STYLE="font-weight:bold" VALUE="Match Now"></TD>
</TR>
</TABLE>
</FORM>
<!-- Display any reults here --->
<SPAN id="output"></SPAN>
<!-- Default to find --->
<SCRIPT LANGUAGE="JavaScript">
hideReplaceFields();
</SCRIPT>
</BODY>
</HTML>
本文通过实例详细解析了正则表达式的语法与功能,包括匹配纯文本、任意字符、特殊字符等,帮助读者掌握正则表达式的使用技巧。
929

被折叠的 条评论
为什么被折叠?



