{
richTextBox2.Text += "正则表达式:" + reg.ToString() + "\n";
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += "匹配内容:" + m.Value + " 匹配起始位置:" + m.Index + " 匹配长度:" + m.Length + "\n";
}
richTextBox2.Text += "匹配总数:" + reg.Matches(test).Count + "\n----------------\n";
}
/*--------输出--------
正则表达式:line_
匹配总数:0
----------------
正则表达式:line\b
匹配内容:line 匹配起始位置:4 匹配长度:4
匹配内容:line 匹配起始位置:20 匹配长度:4
匹配总数:2
----------------
正则表达式:line\b
匹配内容:line 匹配起始位置:4 匹配长度:4
匹配内容:line 匹配起始位置:20 匹配长度:4
匹配总数:2
----------------
正则表达式:line\\b
匹配总数:0
----------------
*/
正则表达式一Regex("line\b"),这里的“\b”是退格符,是不经过正则引擎转义的。源字符串中是没有的,所以匹配结果为0。
正则表达式二Regex("line\\b"),是以正则表达式形式来声明正则的,这里的“\\b”是单词边界,是经过正则引擎转义的。
正则表达式三Regex(@"line\b"),与正则表达式二等价,指单词边界。
正则表达式四Regex(@"line\\b"),其实这个表示的是字符“\”后面跟一个字符“b”,是两个字符,这个在源字符串中自然是找不到匹配项的。
2.5 .NET正则应用中其它转义处理
.NET正则应用中还有一些其它转义方式,虽然用得不多,但也顺便提一下吧。
需求:把字符串中“<”和“>”之间的数字前加上“$”
复制代码 代码如下:
string test = "one test <123>, another test <321>";
Regex reg = new Regex(@"<(\d+)>");
string result = reg.Replace(test, "<$1>");
richTextBox2.Text = result;
/*--------输出--------
one test <$1>, another test <$1>
*/
也许你会惊奇的发现,替换结果不是在数字前加了“$”,而是将所有数字都替换为“$1”了。
为什么会这样呢,这是因为在替换结构中,“$”是有特殊意义的,在它后面接数字,表示对对应编号捕获组匹配结果的引用,而有些情况下,需要在替换结果中出现“$”字符本身,但它后面又跟了数字,这时候就需要用“$”对它进行转义了。而上面这个例子却恰恰是由于这种转义效果导致出现了异常结果,要规避这一问题,可以使替换结果中不出现对捕获组的引用。
string test = "one test <123>, another test <321>";
Regex reg = new Regex(@"(?<=<)(?=\d+>)");
string result = reg.Replace(test, "$");
richTextBox2.Text = result;
/*--------输出--------
one test <$123>, another test <$321>
*/
3 JavaScript及Java中的转义符
JavaScript及Java中正则的转义符处理,以字符串形式声明时,基本上都是与.NET中一致的,简单的介绍一下。
在JavaScript中,以字符串形式声明正则,与C#中的表现是一样的,同样会显得很笨拙。
复制代码 代码如下:
<script type="text/javascript">
var data = ["\\", "\\\\"];
var reg = new RegExp("^\\\\$", "");
for(var i=0;i<data.length;i++)
{
document.write("源字符串:" + data[i] + " 匹配结果:" + reg.test(data[i]) + "<br />");
}
</script>
/*--------输出--------
源字符串:\ 匹配结果:true
源字符串:\\ 匹配结果:false
*/
JavaScript中虽然没有提供C#中这种“@”方式的字符串声明方式,但提供了另一种正则表达式的专有声明方式。
复制代码 代码如下:
<script type="text/javascript">
var data = ["\\", "\\\\"