1

次のような文字列があります。

$string = 'hay qua nhi @[3818||Vinh HandSome] và @[101623||Vũ Hoài Anh] ';

それを配列に変換したい:

$array  = array([0]=>'@[3818||Vinh HandSome]',[1]=>'@[101623||Vũ Hoài Anh]');

また、元の文字列を次のように置き換えたい:

$string  = 'hay qua nhi <a href='users/3818'>Vinh HandSome</a> và <a href='users/101623'>Vũ Hoài Anh</a>';

だから私は正規表現を使用しようとしました:

echo preg_replace("/@\[([0-9]+)\|\|(.*)\]/","<a href='/users/$1'>$2</a>",$string);
preg_match_all("/@\[([0-9]+)\|\|(.*)\]/", $string, $result, PREG_PATTERN_ORDER);
print_r($result[0]); 

しかし、うまくいかないようです。この場合の正しい正規表現について誰か考えがありますか?

4

2 に答える 2

0

両方の正規表現に対して遅延演算子を試してください。/@\[([0-9].+?)\|\|(.+?)\]/

于 2012-11-19T19:51:41.653 に答える
0
$subject = 'hay qua nhi @[3818||Vinh HandSome] và @[101623||Vũ Hoài Anh] ';
$pattern = '/@\[([\d]+)\|\|([^\]]+)\]/';
$replacement = "<a href='users/$1'>$2</a>";
$result = preg_replace($pattern, $replacement, $subject);

今、$result含まれます

hay qua nhi <a href='users/3818'>Vinh HandSome</a> và <a href='users/101623'>Vũ Hoài Anh</a> 
于 2012-11-19T19:53:49.700 に答える