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")
?>

ここでは、正規表現文字列をPHPのpreg_match_all関数path="([a-zA-Z0-9_]+)"と一緒に使用しています。これは、パスと一致する必要があります。、ただし、有効なhtml属性ではありません。ご存知かどうかはわかりませんが、に変更することを検討してください。pathdata-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 に答える