假设我有文本如下
<!--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" 是一本真正能够“精通正则表达式”的书籍,有兴趣的朋友可以好好学习一下。。。