2014-06-25 3 views
0

Могу ли я это сделать?RegExp заменить слово не начинающимся с определенных символов

...blah-blah...AA_word.......blah-blah...AB_word......word........Nword.... 

Мне нужно заменить только те вхождения слова, которые не начинаются с «AB_», так это будет выглядеть следующим образом:

...blah-blah...AA_XXXX.......blah-blah...AB_word......XXXX........NXXXX.... 

Возможно ли это? Я более или менее знаком с регулярным выражением, но все еще не могу понять, как это сделать. Язык программирования не имеет значения - PHP, JS или C#, независимо от

ответ

3

Поиск: (?<!AB_)word
и заменить: XXXX

Perl- осуществление:

my $str = "...blah-blah...AA_word.......blah-blah...AB_word......word........Nword...."; 
$str =~ s/(?<!AB_)word/XXXX/g; 
say $str; 

Выход:

...blah-blah...AA_XXXX.......blah-blah...AB_word......XXXX........NXXXX.... 

С PHP:

$str = "...blah-blah...AA_word.......blah-blah...AB_word......word........Nword...."; 
$str = preg_replace('/(?<!AB_)word/', 'XXXX', $str); 
echo "$str\n"; 
+0

спасибо! работал как шарм – phantasm

+1

Никогда не знал об этом. Для любопытных кошек это называется * Отрицательное утверждение lookbehind *. Спасибо –

+0

+1 для понимания правильных требований. – anubhava

0

В JS:

var s = "...blah-blah...AA_word.......blah-blah...AB_word......word........Nword...." 

s.replace("AB_word", "????").replace(/word/g, "XXXX").replace("????", "AB_word") 
// results in 
// ...blah-blah...AA_XXXX.......blah-blah...AB_word......XXXX........NXXXX.... 

НТН

Смежные вопросы