Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Имя файла
Форумы портала PHP.SU » PHP » Регулярные выражения » Имя файла

Страниц (1): [1]
 

1. kochan10 - 29 Июня, 2010 - 13:04:16 - перейти к сообщению
Есть файл. Скажем, desktop.ini
Нужно в нём вставить перед последней точкой переменную.
Делаю так:
PHP:
скопировать код в буфер обмена
  1. $pattern="/^((.*)+)(\.[a-zA-Z0-9]+)$/i";
  2. $file=preg_replace($pattern,"\1".$i."\2",$file);

Не работает. Помогите, пожалуйста.
2. ALEN - 29 Июня, 2010 - 13:22:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $file=preg_replace("/^(.*)\.(.*)$/i","\${1}".$i.".\${2}",$file);


чем плох вариант?
3. kochan10 - 29 Июня, 2010 - 13:31:02 - перейти к сообщению
точек может быть ведь и несколько. и ещё появилась необходимость изменять такое: desktop(2).ini на desktop(3).ini.
Т.е. если в скобках есть цифра, увеличить её на единицу.
4. ALEN - 29 Июня, 2010 - 14:12:34 - перейти к сообщению
kochan10
Попробуйте прежде чем говорить, только перед последней происходят изменения, а вот со скобками вот так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $file="name(246)text.php(2).txt.html";
  3. $i='-site.ru';
  4. function prc($match){ return "(".($match[1]+1).")"; }
  5. $file=preg_replace("/^(.*)\.(.*)$/i","\${1}".$i.".\${2}",$file);
  6. echo $file=preg_replace_callback("/\(([0-9]*)\)/isU","prc",$file);
  7. ?>


Тестируй!
5. kochan10 - 29 Июня, 2010 - 14:22:30 - перейти к сообщению
Да, спасибо, ошибся=)
Только ещё один момент. Нужно, чтобы переменная $i добавлялась только тогда, когда нету скобок с цифрами. Она и есть (1). Как в винде при копировании файлов.
6. JustUserR - 29 Июня, 2010 - 17:09:39 - перейти к сообщению
kochan10 пишет:
Только ещё один момент. Нужно, чтобы переменная $i добавлялась только тогда, когда нету скобок с цифрами. Она и есть (1). Как в винде при копировании файлов
То есть вам нужно сначала проверить наличие числа перед последним расширением и если оно имеется в круглых скобках то инкреминировать его - в таком случае проще обойтись без регулярного выражение с помощью обычной стоковой функции поиска с конца rindex - конкретно вы отбрасываете расширение с точкой и смотрите наличие скобок и значения в них и после соединяете стороку заново
7. kochan10 - 30 Июня, 2010 - 09:28:31 - перейти к сообщению
Понятно, спасибо=)
8. JustUserR - 30 Июня, 2010 - 14:34:18 - перейти к сообщению
kochan10 пишет:
Понятно, спасибо=)
Пожалуйста! Кроме того в данном случае использование строковых функций будет работать эффективнее чем регулярное выражение - поскольку просмотр сразу будет осуществляться с конца и не нужны дополнительные ресурсы на вызов callback-функции Однако при разборе строки таким образом полезно учесть неделимые расширения типа .tar.gz

 

Powered by ExBB FM 1.0 RC1