您的位置:首页 > 其它

正则表达式匹配多行文本

2009-03-22 10:05 344 查看
假设我有文本如下

<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->
<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->

使用正则表达式匹配时我希望得到第一个 <!--ONETHING_BEGIN--> 和第一个 <!--ONETHING_END--> 之间内容,即

<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->

但是结果往往是会得到第一个 <!--ONETHING_BEGIN--> 和最后一个 <!--ONETHING_END--> 之间内容,即

<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->
<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->

原来正则表达式默认的是匹配最大的字符串,加上?后就是取得最小的匹配,所谓的惰性匹配。

所以可以这样写:

<!--ONETHING_BEGIN--> .*? <!--ONETHING_END-->

参见http://topic.csdn.net/u/20070320/16/91ef4580-ab37-4c5e-912e-5d7da26b40de.html

另外有一些相关资料:

http://topic.csdn.net/u/20080306/17/f37a1818-3968-49b4-8f79-e5564486d63e.html

Jeffrey E.F. Friedl的"Mastering Regular Expressions" 是一本真正能够“精通正则表达式”的书籍,有兴趣的朋友可以好好学习一下。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: