0

我有一个这样的字符串:

$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text
           some text <div class"myClass" path="myPath_2">some content</div> some text...';

我需要获取所有出现的属性路径的值:

$path = array('myPath_1','myPath_2');

一旦我有了这个,我必须替换整个 div:

<div class"myClass" path="myPath_1">some content</div>

带有图像标签:

<img src="myPath_1">

我该怎么办?

4

2 回答 2

0
<?php
$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text
           some text <div class"myClass" path="myPath_2">some content</div> some text...';
$matches = array();
$matches = preg_match_all('/path="([a-zA-Z0-9_]+)"/', $string, $matches, PREG_SET_ORDER);
$paths = array_map(function($m){
    return $m[0];
}, $matches);
var_dump($paths);
// array("myPath_1", "myPath_2")
?>

在这里,我将正则表达式字符串path="([a-zA-Z0-9_]+)"与 PHP 的preg_match_all 函数一起使用,它应该与您的路径匹配。path,但是不是有效的 html 属性,我不知道您是否知道。考虑将其更改为data-path.

我知道您在问如何替换您的 div 标签,但您当前的 html 格式不正确。<div class"myClass"应该<div class="myClass"改为。但是,您应该能够执行以下操作:

<?php
$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text
           some text <div class"myClass" path="myPath_2">some content</div> some text...';
$new_string = preg_replace('<div class=?"myClass" path="([a-zA-Z0-9_]+)">[a-zA-Z0-9 ]+</div>','<img src="$1">');
?>
于 2013-03-21T16:49:51.593 回答
0

您可以尝试使用正则表达式:

$pattern = '/<div([a-zA-Z0-9 ="]+)path="([^"]+)">([^<]+)<\/div>/';
echo preg_replace($pattern, '<img src="$2" />', $string);
于 2013-03-21T16:50:38.020 回答