<!--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:(.*)|-->$
,但它返回所有字符串。
答案 0 :(得分:1)
.
也匹配|
。所以正则表达式会到最后位置找|-->
,这叫做贪婪。这是一个非常常见的错误,经常在这里询问。
解决这个问题的简单方法:
^<!--dle_image_begin:([^|]*)\|-->
^^^^ ^ ^
| | |
negative class | |
escape pipe |
dollar is gone
否定字符类:除|
以外的所有字符都匹配。因此,首先会找到|-->
。正则表达式是它自己的语言,你需要在PHP旁学习。它遵循自己的规则。实践是完美的。
答案 1 :(得分:0)
这将匹配您想要的路径
(?<=<!--dle_image_begin:)((?:(?!\|-->).)*)(?=|-->)
第一个和最后一个部分((?<=<!--dle_image_begin:)
&amp; (?=|-->)
)被称为“lookarounds”以检查字符串之前/之后。
有关详细说明,请参阅此处:http://www.regex101.com/r/iS8lE5