我正在尝试使用PHP查找文本块$content
中的所有IMG标记,并用液体模板标记替换它们,同时保留它们在文本中的位置以及src
和{{1每个文本。
示例alt
$content
已转换的文字
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<img src="http://example.com/frog.jpg" alt="frog desc" />
Nunc feugiat lorem tellus, et sollicitudin eros feugiat vitae. Aliquam auctor velit nec auctor semper
<img src="http://example.com/snake.jpg" alt="snake desc" />
Donec egestas felis id turpis sollicitudin blandit vitae quis libero. Ut massa arcu, condimentum vitae laoreet auctor, blandit sit amet enim.
<img src="http://example.com/toad.jpg" alt="toad desc" />
<img src="http://example.com/lizard.jpg" alt="lizard desc" />
Maecenas vel purus nec mauris dignissim pellentesque.
到目前为止,我沿着一条路径使用:How to extract img src, title and alt from html using php?将所有图像及其属性提取到一个数组中,但发现很难将图像重新插入到原始位置的文本中。
任何建议都将受到赞赏:)
PS - 这是我试图影响的图像字符串:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
{% img="frog.jpg" alt="frog desc" %}
Nunc feugiat lorem tellus, et sollicitudin eros feugiat vitae. Aliquam auctor velit nec auctor semper
{% img="snake.jpg" alt="snake desc" %}
Donec egestas felis id turpis sollicitudin blandit vitae quis libero. Ut massa arcu, condimentum vitae laoreet auctor, blandit sit amet enim.
{% img="toad.jpg" alt="toad desc" %}
{% img="lizard.jpg" alt="lizard desc" %}
答案 0 :(得分:1)
试试这个,希望这会有所帮助。
正则表达式: <img.*?src=".*\/(?!>)([^"]+)"\s+alt="([^"]+)"[^>]+>
1。
<img.*?src="
这将匹配<img
,然后全部匹配src="
2。
.*\/(?!>)
这将匹配所有/
下一个字符不是>
3。
([^"]+)
这将匹配除"
以外的所有内容,()
将在第一组中捕获此内容。4。
"\s+alt="
这将匹配"
,然后是spaces
然后alt="
5。
([^"]+)"
这将匹配"
以外的所有内容,然后匹配"
,然后()
将在第二组中捕获此内容。6。
[^>]+>
这将匹配>
除外,然后匹配此>
替换 {% img="$1" alt="$2" %}
<?php
$string=<<<HTML
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<img src="http://example.com/frog.jpg" alt="frog" />
Nunc feugiat lorem tellus, et sollicitudin eros feugiat vitae. Aliquam auctor velit nec auctor semper
<img src="http://example.com/snake.jpg" alt="snake" />
Donec egestas felis id turpis sollicitudin blandit vitae quis libero. Ut massa arcu, condimentum vitae laoreet auctor, blandit sit amet enim.
<img src="http://example.com/toad.jpg" alt="toad" />
<img src="http://example.com/lizard.jpg" alt="lizard" />
Maecenas vel purus nec mauris dignissim pellentesque.
HTML;
echo preg_replace('/<img.*?src=".*\/(?!>)([^"]+)"\s+alt="([^"]+)"[^>]+>/', '{% img="$1" alt="$2" %}', $string);
答案 1 :(得分:0)
虽然Sahil的模式确实恢复了预期的效果,但它并不像它应该的那样有效。它使得捕获组太多,并且比我的模式多花费60%。
请改用此模式:/<img src="[^"]*\/([^"]+" alt="[^"]+") \/>/
(Pattern Demo)
实施(PHP Demo):
$content='
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<img src="http://example.com/frog.jpg" alt="frog" />
Nunc feugiat lorem tellus, et sollicitudin eros feugiat vitae. Aliquam auctor velit nec auctor semper
<img src="http://example.com/snake.jpg" alt="snake" />
Donec egestas felis id turpis sollicitudin blandit vitae quis libero. Ut massa arcu, condimentum vitae laoreet auctor, blandit sit amet enim.
<img src="http://example.com/toad.jpg" alt="toad" />
<img src="http://example.com/lizard.jpg" alt="lizard" />
Maecenas vel purus nec mauris dignissim pellentesque.';
echo preg_replace('/<img src="[^"]*\/([^"]+" alt="[^"]+") \/>/', '{% img="$1 %}', $content);
输出:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
{% img="frog.jpg" alt="frog" %}
Nunc feugiat lorem tellus, et sollicitudin eros feugiat vitae. Aliquam auctor velit nec auctor semper
{% img="snake.jpg" alt="snake" %}
Donec egestas felis id turpis sollicitudin blandit vitae quis libero. Ut massa arcu, condimentum vitae laoreet auctor, blandit sit amet enim.
{% img="toad.jpg" alt="toad" %}
{% img="lizard.jpg" alt="lizard" %}
Maecenas vel purus nec mauris dignissim pellentesque.