|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
31.10.2010, 00:00 | #1 |
Ученый
|
Регулярные выражения
"Похожие темы не найдены" - так молвил форум при введённом поле "Заголовок".
Сразу к делу. Пытаюсь составить регулярное выражение на php. Изучил литературу, ссылки на которую мне выдал гугл. Дано: Строка, в которой может находится ноль или несколько выражений, отделённых от строки символами "{" и "}" соответственно. После открывающей фигурной скобки идёт символ "@", затем содержимое текстового блока. Текстовый блок состоит из 4ёх частей, разделённых между собой символом ";": 1. 1-е окончание. 2. 2-е окончание. 3. 3-е окончание. 4. Число-параметр. Пример строки: На Вашем счёте {@рубль;рубля;рублей;5}. Выходящее значение: На Вашем счёте 5 рублей. Необходимо, чтобы регулярное выражение находило подобные блоки и выполняла определённую функцию. Функция и все проверки реализованы. Т.е. если делать без регулярного выражения для каждого блока в отдельности, то всё работает. Пытался сделать так: Код:
$str = 'На Вашем счёте {@рубль;рубля;рублей;5}.'; preg_match_all("/[{][@][;a-zA-Zа-яА-Я0-9]+[}]/", $str, $matches); if(count($matches) == 0) return false; ... Буду очень благодарен за помощь. Добавлено через 1 час 12 минут Проблему решил сам, всем спасибо Пожалуй, поделюсь кодом Функция: Код:
public function ending($str = null) { if($str == null) return false; if(!preg_match_all("/{[@]([a-zA-Zа-яА-Я0-9;]+)}/", $str, $arr)) return false; $cnt = count($arr); if($cnt < 2) return false; for($i=1;$i<$cnt;$i++) { foreach($arr[$i] as $one) { $end = explode(';', $one); if(strlen($end[3]) == 0) continue; $num100 = $end[3] % 100; $num10 = $end[3] % 10; if($num100 >= 5 && $num100 <= 20) $replace = $end[2]; else if($num10 == 0) $replace = $end[2]; else if($num10 == 1) $replace = $end[0]; else if($num10 >= 2 && $num10 <= 4) $replace = $end[1]; else if($num10 >= 5 && $num10 <= 9) $replace = $end[2]; else $replace = $end[1]; $search = '{@'.$end[0].';'.$end[1].';'.$end[2].';'.$end[3].'}'; $str = str_replace($search, $end[3].' '.$replace, $str); } } return $str; } Код:
$online = 272; //предположим $txt = "Сейчас в игре {@человек;человека;человек;$online}."; echo ending($txt); Сейчас в игре 272 человека. Соль данной функции в том, что она позволяет делать следующее: Код:
$str = "Всего в игре {@человек;человека;человек;$online}.<br/>"; $str.= "Из них {@орк;орка;орков;$orc} и {@гном;гнома;гномов;$gnome}"; echo ending($txt);
__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть? admin: О Боже! admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет Последний раз редактировалось Hantet; 30.10.2010 в 22:57. |