正则表达式 - 最后一次出现不是第一次 - 为什么?

时间:2011-11-16 11:43:33

标签: php regex preg-replace

我对reg ex有疑问。用PHP 我有这样的字符串:

sdfsfds dsfdsh kj <img src="cid:sdfsdf/img.jpg@23232"> sdfd sfdhg sdjhg sdfsfds dsfdsh kj <img src="cid:sdfsdf/img.jpg@23232"> sdfd sfdhg sdjhg 

我想抓住'cid:'和'“&gt;'之间的所有内容并用其他东西替换它。 这是我的注册表:

cid:.*img\.jpg.*\"

我得到什么回报??

cid:sdfsdf/img.jpg@23232"> sdfd sfdhg sdjhg sdfsfds dsfdsh kj <img src="cid:sdfsdf/img.jpg@23232"

双重

cid:sdfsdf/img.jpg@23232

为什么?

3 个答案:

答案 0 :(得分:3)

你的正则表达式是贪婪的,.*将匹配最长的字符串。许多正则表达式方言允许.*?代替匹配最短的字符串,或者您可以限制它以使其不跨越特定边界,例如与cid:[^">]*img\.jpg[^">]*"

答案 1 :(得分:2)

你的正则表达式是贪婪的。使用非贪婪量词,在它们之后添加?

cid:.*?img\.jpg.*?\"

http://en.wikipedia.org/wiki/Regular_expression#Lazy_quantification

答案 2 :(得分:0)

你的意思:

/<img\s.*?\bsrc="cid:(.*?)".*?>/