Регулярные выражения - символ "^"

Pegiy

Guest
Регулярные выражения - символ "^"

[^f] - любой символ кроме f
а показать любые символы кроме некоторого словосочетания?

Например, есть модели sharp fo-71 и sharp fax fo-51
Необходимо вставить "fax" после "sharp", если его там нет
Понятно, что sharp ([^f]) не подходит
 

Pegiy

Guest
может быть :
sharp fo
sharp co
sharp tx
sharp fax
и т.д.
необходиvj вставить fax только в первые три
 

fixxxer

К.О.
Партнер клуба
ну если уж хочется юзать preg_replace то примерно так:
PHP:
preg_replace("/(sharp\s)(fax)?/i", "\\1fax ", $s)
хотя быстрее будет так (для случая, если название в строке встречается более чем 1 раз, сам подправишь):

PHP:
if (substr($s,$i=(strpos("sharp ",$s)+6),3) != 'fax') $s = substr($s,0,$i) . 'fax '.substr($s,$i);
Для случая если "sharp" вообще не встречается тоже проверку добавишь если надо ;)
 

Макс

Старожил PHPClub
PHP:
$ar = array(
   "sharp fo", 
   "sharp co", 
   "sharp tx", 
   "sharp fax", 
);
foreach ($ar as $a) {
   echo preg_replace("~(?<=sharp )(?!fax)~", "fax ", $a)."\n";
}
 

Pegiy

Guest
Автор оригинала: Pegiy
может быть :
sharp fo
sharp co
sharp tx
sharp fax
и т.д.
Автор оригинала: Maxim Matyukhin
PHP:
$ar = array(
   "sharp fo", 
   "sharp co", 
   "sharp tx", 
   "sharp fax", 
);
и т.д. означает, что после sharp может быть что угодно и заранее чтобы сформировать массив что именно неизвестно
 

Макс

Старожил PHPClub
Pegiy
не тормози, это просто пример работы.
Регексп от туда возьми
 
Сверху