C#正则表达式高级技巧及实例详解
2009-06-10 08:32:04 来源:WEB开发网核心提示: 懒惰操作符把上面的式子稍作修改,加上一个问号(?),C#正则表达式高级技巧及实例详解(2),能让表达式变懒惰:/<h1>.*?<\/h1>/这样它会觉得,只需匹配到第一个 h1 结尾标签就完成任务了,例如,下面这个简单例子的目的是匹配出引号内部的内容:# 建立匹配数
懒惰操作符
把上面的式子稍作修改,加上一个问号(?),能让表达式变懒惰:
/<h1>.*?<\/h1>/
这样它会觉得,只需匹配到第一个 h1 结尾标签就完成任务了。
另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上,如果没有加上问号,它会寻找尽可能多的重复次数,加上的话,则会尽可能少重复(当然也就是“重复n次”最少)。
# 建立字串
$str = 'hihihi oops hi';
# 使用贪婪的{n,}操作符进行匹配
preg_match( '/(hi){2,}/', $str, $matches ); # matches[0] 将是 'hihihi'
# 使用堕化了的 {n,}? 操作符匹配
preg_match( '/(hi){2,}?/', $str, $matches ); # matches[0] 将是 'hihi'
2. 回返引用(Back referencing)
有什么用?
回返引用(Back referencing)一般被翻译成“反向引用”、“后向引用”、“向后引用”,个人觉得“回返引用”更为贴切[笨活儿]。它是在正则表达式内部引用之前捕获到的内容的方法。例如,下面这个简单例子的目的是匹配出引号内部的内容:
# 建立匹配数组
$matches = array();
# 建立字串
$str = ""This is a 'string'"";
# 用正则表达式捕捉内容
preg_match( "/(\"|').*?(\"|')/", $str, $matches );
# 输出整个匹配字串
echo $matches[0];
它会输出:
"This is a'
显然,这并不是我们想要的内容。
更多精彩
赞助商链接