0
<!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/1.png|-->
<img src="some_url.com/uploads/posts/2012-12/1.png" alt="***" title="***"  />
<!--dle_image_end--> bla bla bla bla <!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/2.png|-->
<img src="some_url.com/uploads/posts/2012-12/2.png" alt="***" title="***"  />
<!--dle_image_end--> bla bla bla <!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/3.png|-->
<img src="some_url.com/uploads/posts/2012-12/3.png" alt="***" title="***"  />
<!--dle_image_end-->

从上面的例子我需要得到^<!--dle_image_begin:(.*)|-->$,但它返回所有的字符串。

4

2 回答 2

1

.比赛|也是如此。所以正则表达式会走到最后一个位置去寻找|-->,这被称为贪心。一个非常常见的错误,在 SO 上经常被问到这里。

作为处理该问题的简单方法:

^<!--dle_image_begin:([^|]*)\|-->
                      ^^^^  ^    ^
                        |   |    |
           negative class   |    |
                  escape pipe    |
                    dollar is gone

否定字符类:几乎|匹配。所以一开始会停下来|-->发现。正则表达式是它自己的语言,你需要在 PHP 旁边学习。它遵循它自己的规则。熟能生巧。

于 2013-01-05T22:59:33.250 回答
0

这将匹配您想要的路径

(?<=<!--dle_image_begin:)((?:(?!\|-->).)*)(?=|-->)

第一部分和最后一部分((?<=<!--dle_image_begin:)& (?=|-->))被称为“环视”,用于在之前/之后检查字符串。

有关更多说明,请参见此处:http ://www.regex101.com/r/iS8lE5

于 2013-01-05T23:04:35.267 回答