Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена N-го вхождения
 
 автор: dtopenya   (05.05.2012 в 11:59)   письмо автору
 
 

Здравствуйте.
Есть строка, например, 495-111-11-11, в которой надо заменить второе и последующие вхождения "-" на пусто.

1. Можно ли это сделать одной регуляркой?
2. Можно ли в регулярке задавать конфиг замен, т.е. заменять четные/нечетные найденные значения или конкретные, например, на позициях 1,3,4 и 7?

  Ответить  
 
 автор: ladan   (06.05.2012 в 02:37)   письмо автору
 
   для: dtopenya   (05.05.2012 в 11:59)
 

$a = "495-111-11-11";

function fin($match) {$match[2] = preg_replace("/-/","",$match[2]); $text = $match[1].$match[2]; return $text;}

echo preg_replace_callback("/(.+?-.+?)-(.+)/","fin",$a);


А второй вопрос можно через preg_match_all сделать

  Ответить  
 
 автор: Sfinks   (07.05.2012 в 13:23)   письмо автору
 
   для: dtopenya   (05.05.2012 в 11:59)
 

> последующие вхождения "-" на пусто
На пусто - это на пробел или удалить?

> 495-111-11-11
Если это конкретный и единственный формат, то можно. Если возможно
495-111-11 11
495-111-1111
495-111 11 11
495-11-1-1-1-11
то врядли. Ну или отосплюсь - подумаю =)

> 2. Можно ли.....
Нет

  Ответить  
 
 автор: Sfinks   (07.05.2012 в 19:05)   письмо автору
 
   для: Sfinks   (07.05.2012 в 13:23)
 

<pre><?php
  $s 
= array ( '495-111-11-11' ,
               
'495-111-1111'  ,
               
'495-111 11 11' ,
               
'495-11-1-1-1-11' );
  
$pattern "#(?<!^\d)(?<!^\d{2})(?<!^\d{3})[\-\s](\d+)#";
  foreach(
$s as $number)
    echo 
preg_replace$pattern "$1" $number )."\n";
?></pre>
495-1111111
495-1111111
495-1111111
495-1111111

  Ответить  
 
 автор: dtopenya   (10.05.2012 в 11:16)   письмо автору
 
   для: Sfinks   (07.05.2012 в 19:05)
 

Немного не то.
Я думал, что есть спецсимволы, с помощью которых можно задать параметры замены, как, например, для выборки символов {1,3}.

Все равно спасибо за ответы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования