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 » Регулярные выражения » ошибка в регулярном выражении

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

1. xaser - 23 Января, 2012 - 23:24:41 - перейти к сообщению
например есть значения:
а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)

как правильно состряпать выражение?
2. LIME - 23 Января, 2012 - 23:48:08 - перейти к сообщению
в вашем случае проще так
PHP:
скопировать код в буфер обмена
  1. $Kod_Kataloga=str_ireplace('a','A-',$Kod_Kataloga);
  2. $Kod_Kataloga=str_ireplace('c','Si-',$Kod_Kataloga);
3. Саныч - 23 Января, 2012 - 23:51:27 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $Kod_Kataloga = str_ireplace(array('a', 'c'), array('A-', 'Si-'), $Kod_Kataloga);
4. LIME - 23 Января, 2012 - 23:56:34 - перейти к сообщению
Саныч вово))
только хотел исправить))
5. xaser - 23 Января, 2012 - 23:57:09 - перейти к сообщению
при таком коде а в номерах типа А15а не получится конфуз: А-15А- ?
6. LIME - 23 Января, 2012 - 23:59:09 - перейти к сообщению
xaser конечно да
а что не должно?
правильно ставьте задачу
7. xaser - 24 Января, 2012 - 00:04:27 - перейти к сообщению
смотрите, есть разные коды:
А1
А167
С65
С132а

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

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

ПС: мне главное, чтоб первые поменять правильно, остальные я смогу Улыбка
8. LIME - 24 Января, 2012 - 00:12:23 - перейти к сообщению
не знаю изящного решения
предлагаю тупо очередность
PHP:
скопировать код в буфер обмена
  1. <?
  2. $Kod_Kataloga = preg_replace("#^a#i", "A-", $Kod_Kataloga);
  3. $Kod_Kataloga = preg_replace("#^c#i", "Si-", $Kod_Kataloga);

долго не думал
если кто-то предложит интересное решение буду рад увидеть
9. Саныч - 24 Января, 2012 - 00:14:23 - перейти к сообщению
xaser пишет:
всё, что идет послецифр (или внутри них) заменить на такие же английские:
например номер "С15Д4БС" должен стать номером Si-15D4BC
С этого и нужно было начинать! Это называется транслист.
см[dot] пример 2
10. LIME - 24 Января, 2012 - 00:15:58 - перейти к сообщению
Саныч ???
только в начале строки
только регурярка априори
11. xaser - 24 Января, 2012 - 00:20:07 - перейти к сообщению
в результате предложенного кода:
$Kod_Kataloga = preg_replace("#^a#i", "A-", $Kod_Kataloga);
$Kod_Kataloga = preg_replace("#^c#i", "Si-", $Kod_Kataloga);

замен букв "а" и "с" в конце строк все-равно происходит...
(Добавление)
я могу конечно сделать коряво через IF и SUBSTR... но это же коряво!!! Недовольство, огорчение
12. LIME - 24 Января, 2012 - 00:24:16 - перейти к сообщению
xaser пишет:
замен букв "а" и "с" в конце строк все-равно происходит...
это невозможно
вероятно вы либо не сохранили код либо берете кэшируемые страницы
13. xaser - 24 Января, 2012 - 00:29:00 - перейти к сообщению
Да!!! Работает!!! Наконец-то!!! СПАСИБИЩЕ!!!! Улыбка
правда не понимаю этого выражения... что означает решетка?
14. LIME - 24 Января, 2012 - 00:29:20 - перейти к сообщению
еще момент
вы уверены что замена должна происходить в многострочном режиме?
вы понимаете о чем я говорю?
(Добавление)
xaser пишет:
что означает решетка?
ну славте яйца куриные
нечего особо не означает
просто ограничитель рег. выражения
оно может любым
15. Саныч - 24 Января, 2012 - 00:33:19 - перейти к сообщению
xaser если я правильно понял вам нужно:
xaser пишет:
всё, что идет послецифр (или внутри них) заменить на такие же английские:
например номер "С15Д4БС" должен стать номером Si-15D4BC
Так зачем тогда вам регулярка для первой буквы? Берите strtr и меняйте сразу все

 

Powered by ExBB FM 1.0 RC1