PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
VenZell
Отправлено: 24 Февраля, 2014 - 07:45:54
Частый гость
Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013
Помог: 12 раз(а)
Посмотреть и протестировать можно
тут .
PHP:
скопировать код в буфер обмена
$string = '[country ln=COUNTRIES][cn=us]USA[/cn], [cn=hu]Hungary[/cn], [cn=ru]Russia[/cn][/country]' ;
$group_name_pattern = '#\[country ln=(.+?)\](.+?)\[\/country\]#i' ;
$countries_pattern = '#\[cn=(.+?)\](.+?)\[\/cn\]#i' ;
VenZell
Отправлено: 25 Февраля, 2014 - 09:04:57
Частый гость
Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013
Помог: 12 раз(а)
Viper , можно и одним. Но без доработки результата напильником все равно не обойтись.
Посмотреть можно тут
Вот код:
PHP:
скопировать код в буфер обмена
$string = '[country ln=COUNTRIES][cn=us]США[/cn], [cn=hu]Венгрия[/cn], [cn=ru]Россия[/cn][/country]' ;
$pattern = '#(?:\[country ln=(.+?)\]|,\s*)\[cn=([a-zA-Z]{2,3})\]([а-яА-ЯёЁ\s]+?)\[\/cn\](?=(?:,\s*|\[\/country\]))#u' ;
echo $result ;
# COUNTRIES: us США, hu Венгрия, ru Россия
(Отредактировано автором: 25 Февраля, 2014 - 09:05:59)
Viper
Отправлено: 25 Февраля, 2014 - 11:22:41
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007
Откуда: Симферополь
Помог: 98 раз(а)
PHP:
скопировать код в буфер обмена
$t = '[country ln=COUNTRIES][cn=us]США[/cn], [cn=hu]Венгрия[/cn], [cn=ru]Россия[/cn][/country]' ;
echo '<pre>' ;
$html = '' ;
$html .= $matches [ 1 ] . ': ' ;
$cn = preg_replace ( '#\[cn=(.+?)\](.+?)\[/cn\]#' , '<img src="$1.png" border="0" alt="$2" class="ui-icon-country" />$2' , $matches [ 2
] ) ; return $html . $cn ;
} , $t ) ;
echo '<pre>' ;
Сделал пока вот так. Правда смущает быстродействие. В тексте таких замен 4. А текст этот на странице выводится в виде статей, т.е. от 5 до 100 статей. Итого примерно от 20 до 400 замен.
Может проще переделать теги на статику, а заменять только языковую переменную?
MAXUS
Отправлено: 25 Февраля, 2014 - 15:35:53
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Viper пишет: Сделал пока вот так.
Вотета, думаю, подойдет:
PHP:
скопировать код в буфер обмена
$string = '[country ln=COUNTRIES][cn=us]USA[/cn], [cn=hu]Hungary[/cn], [cn=ru]Russia[/cn], [cn=gb]Great Britain[/cn][/country]' ;
$pattern = '#\[country ln=(.*?)(\])|\[cn=|(\[\/cn\])|\[\/country\]|\]#ie' ;
echo preg_replace ( $pattern , "'$1 '.(('$2 ')?':':'').(('$3 ')?'':' ')" , $string ) ;
Насчет быстродействия буду признателен, если поделитесь результатами.
Дополнение: А... Ну если это парсинг, то не подойдет...
Важное дополнение:
Хотя, а почему нет?
PHP:
скопировать код в буфер обмена
$string = '[country ln=COUNTRIES][cn=us]USA[/cn], [cn=hu]Hungary[/cn], [cn=ru]Russia[/cn], [cn=gb]Great Britain[/cn][/country]' ;
$pattern = '#\[country ln=(.*?)\]|\[cn=(.*?)\](.*?)\[\/cn\]|\[\/country\]|,\s*#ie' ;
echo preg_replace ( $pattern , "(('$1 ')?'$1 :<br />':'').(('$2 ')?'<img src=\" $2 .png\" border=\" 0\" alt=\" $3 \" class=\" ui-icon-country\" />$3 ':'')" , $string ) ;
Работает эта хреновина!
Сдается, так че хочешь можно одним патерном распарсить. Модификатор "e" рулит...
ЗЫ Впервые вижу пользу от сочетания "ie"
ЗЗЫ Хотя вложенные тэги все равно так не распарсить...(Отредактировано автором: 25 Февраля, 2014 - 16:15:01)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB