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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ошибка в регулярном выражении

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: preg_replace()
xaser
Отправлено: 23 Января, 2012 - 23:24:41
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




например есть значения:
а245
А65
с13
с1
с1а
C1b
c1c



Нужно привести их к маске:
A-n и Si-n
(где n-это числа) т.е. "а" и "А" заменить на "А-", "с" и "С" - на "Si-"
при чем только начальные буквы кодировок!
Чтобы получалось:
А-245
А-65
Si-13
Si-1
Si-1а
Si-1b
Si-1c


я наваял:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $Kod_Kataloga = preg_replace("([сС]{1,2})", "Si-", $Kod_Kataloga);



но оно делает например: Si-1Si- (из с1с, а нужен результат Si-1c)

как правильно состряпать выражение?
 
 Top
LIME
Отправлено: 23 Января, 2012 - 23:48:08
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




в вашем случае проще так
PHP:
скопировать код в буфер обмена
  1. $Kod_Kataloga=str_ireplace('a','A-',$Kod_Kataloga);
  2. $Kod_Kataloga=str_ireplace('c','Si-',$Kod_Kataloga);
 
 Top
Саныч
Отправлено: 23 Января, 2012 - 23:51:27
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




PHP:
скопировать код в буфер обмена
  1. $Kod_Kataloga = str_ireplace(array('a', 'c'), array('A-', 'Si-'), $Kod_Kataloga);


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
LIME
Отправлено: 23 Января, 2012 - 23:56:34
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Саныч вово))
только хотел исправить))
 
 Top
xaser
Отправлено: 23 Января, 2012 - 23:57:09
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




при таком коде а в номерах типа А15а не получится конфуз: А-15А- ?
 
 Top
LIME
Отправлено: 23 Января, 2012 - 23:59:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




xaser конечно да
а что не должно?
правильно ставьте задачу
 
 Top
xaser
Отправлено: 24 Января, 2012 - 00:04:27
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




смотрите, есть разные коды:
А1
А167
С65
С132а

нужно все первые (начальные) буквы (русские и английские) "а" или "А" заменить на "А-", "с" или "С" заменить на "Si-"

всё, что идет послецифр (или внутри них) заменить на такие же английские:
например номер "С15Д4БС" должен стать номером Si-15D4BC

ПС: мне главное, чтоб первые поменять правильно, остальные я смогу Улыбка

(Отредактировано автором: 24 Января, 2012 - 00:06:04)

 
 Top
LIME
Отправлено: 24 Января, 2012 - 00:12:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




не знаю изящного решения
предлагаю тупо очередность
PHP:
скопировать код в буфер обмена
  1. <?
  2. $Kod_Kataloga = preg_replace("#^a#i", "A-", $Kod_Kataloga);
  3. $Kod_Kataloga = preg_replace("#^c#i", "Si-", $Kod_Kataloga);

долго не думал
если кто-то предложит интересное решение буду рад увидеть
 
 Top
Саныч
Отправлено: 24 Января, 2012 - 00:14:23
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




xaser пишет:
всё, что идет послецифр (или внутри них) заменить на такие же английские:
например номер "С15Д4БС" должен стать номером Si-15D4BC
С этого и нужно было начинать! Это называется транслист.
см[dot] пример 2


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
LIME
Отправлено: 24 Января, 2012 - 00:15:58
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Саныч ???
только в начале строки
только регурярка априори
 
 Top
xaser
Отправлено: 24 Января, 2012 - 00:20:07
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




в результате предложенного кода:
$Kod_Kataloga = preg_replace("#^a#i", "A-", $Kod_Kataloga);
$Kod_Kataloga = preg_replace("#^c#i", "Si-", $Kod_Kataloga);

замен букв "а" и "с" в конце строк все-равно происходит...
(Добавление)
я могу конечно сделать коряво через IF и SUBSTR... но это же коряво!!! Недовольство, огорчение
 
 Top
LIME
Отправлено: 24 Января, 2012 - 00:24:16
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




xaser пишет:
замен букв "а" и "с" в конце строк все-равно происходит...
это невозможно
вероятно вы либо не сохранили код либо берете кэшируемые страницы
 
 Top
xaser
Отправлено: 24 Января, 2012 - 00:29:00
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Да!!! Работает!!! Наконец-то!!! СПАСИБИЩЕ!!!! Улыбка
правда не понимаю этого выражения... что означает решетка?
 
 Top
LIME
Отправлено: 24 Января, 2012 - 00:29:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




еще момент
вы уверены что замена должна происходить в многострочном режиме?
вы понимаете о чем я говорю?
(Добавление)
xaser пишет:
что означает решетка?
ну славте яйца куриные
нечего особо не означает
просто ограничитель рег. выражения
оно может любым
 
 Top
Саныч
Отправлено: 24 Января, 2012 - 00:33:19
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




xaser если я правильно понял вам нужно:
xaser пишет:
всё, что идет послецифр (или внутри них) заменить на такие же английские:
например номер "С15Д4БС" должен стать номером Si-15D4BC
Так зачем тогда вам регулярка для первой буквы? Берите strtr и меняйте сразу все


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB