2013-08-02 2 views
0

У меня есть строка, которая выглядит примерно такПреобразование строки с помощью preg_replace

<a href="/team.php?team_id=521">@Arsenal Fc</a> and <a href="/profile.php?fid=50683">@Tester Alpha</a> 

И мне нужно, чтобы преобразовать его в

«#ArsenalFc и тестер Альфы»

три вещи, чтобы иметь в уме.

1) ссылки на страницы team.php, The @ преобразуется в #

2) ссылки на страницы team.php, струнные пробелы удаляются (Arsenal Fc к ArsenalFc)

3) для ссылок на страницу profile.php, @ удален

Любые идеи показывают, что нужно сделать это просто?

+0

Вы можете сначала striptags, а затем использовать str_replace –

+0

'str_replace ('FC Arsenal', 'FC Hansa Rostock', $ string);';) – hek2mgl

+0

Чтобы быть честным с тобой, я бы проанализировал строку в объект 'DOM' и обрабатывать это. Возможно, вам придется обернуть его в фиктивный '' узел, чтобы заставить его разбираться, но для меня это проще, чем пытаться использовать для него регулярное выражение. –

ответ

1

Это работает для меня

function myPregCallback($res) 
{ 
    return '#'.str_replace(' ','',$res[1]); 
} 
$str = '<a href="/team.php?team_id=521">@Arsenal Fc</a> and <a href="/profile.php?fid=50683">@Tester Alpha</a>'; 
$newStr = preg_replace_callback('#^.+"/team\.php[^>]+>@?([^<]+)</a>#','myPregCallback',$str); 
$newStr = preg_replace('#<a.+?"/profile\.php.+?>@?([^<]+)</a>#','$1',$newStr); 
var_dump($newStr); //string(27) "#ArsenalFc and Tester Alpha" 

Это, конечно, может быть проще, если явные проверки на «team.php» и «profile.php» были не нужны.

+0

Я получаю неожиданную ошибку T_FUNCTION, во второй строке, любые идеи? – Mortage

+0

@Mortage Да, извините - ваша версия PHP явно слишком мала для поддержки анонимных функций (добавлено 5.3) - см. Обновленный ответ – SmokeyPHP

+0

Отлично! прекрасно работает – Mortage

Смежные вопросы