Regex заменяет совпадение на match + addons - PullRequest
1 голос
/ 04 августа 2011

Я хотел бы заменить регистронезависимый, скажем, микс:

text StmiXx and some more mIxx text

после замены регулярного выражения:

text St<font color="red">miX</font>x and some more <font color="red>mIx</font> text

код:

$string = "text StmiXx and some more mIxx text";
$pattern = "/mix/i";
$replacement = "<font color=\"red\">match</font>";
echo preg_replace($pattern, $replacement, $string);

Как можноэто можно сделать с помощью регулярных выражений?Я также хотел бы попробовать это с (Linux) sed или есть способ с egrep, grep.

egrep имеет опцию --color = всегда, но не пользовательское выделение.

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Вы были близки! Вот как вы можете сделать это на PHP:

$string = "text StmiXx and some more mIxx text";
$pattern = "/(mix)/i";
$replacement = "<font color=\"red\">$1</font>";
echo preg_replace($pattern, $replacement, $string);

В шаблоне круглые скобки могут использоваться для захвата контента (группы). Затем вы можете ссылаться на группу по количеству повторяющихся скобок. В этом случае у нас есть только одна группа. Вот почему в замене я использовал $1 для ссылки на единственную группу захвата, которую мы имеем в нашем шаблоне.

1 голос
/ 04 августа 2011
s="text StmiXx and some more mIxx text"
echo "$s" | sed -e 's!\([mM][iI][xX]\)!<font color="red">\1</font>!g'

Edit:

Чтобы выполнить подстановку и вывести только те строки, которые соответствуют:

sed -n -e 's!\([mM][iI][xX]\)!<font color="red">\1</font>!g;/[mM][iI][xX]/p'

И чтобы получить только первые N строк, вы можете передать это в голову или:

sed -n -e '1,10p'
0 голосов
/ 04 августа 2011
$string = "text StmiXx and some more mIxx text";
$pattern = "/(mix)/i";
$replacement = "<font color=\"red\">$1</font>";
echo preg_replace($pattern, $replacement, $string);

Пришлось несколько минут пялиться, чтобы понять, что-то не так внутри кода:)

$ 1 представляет первое, что шаблон находит внутри ()

Например, если вы хотите изменить его на m-ix по какой-то причине, вы можете сделать так:

$string = "text StmiXx and some more mIxx text";
$pattern = "/(m)(ix)/i";
$replacement = "<font color=\"red\">$1-$2</font>";
echo preg_replace($pattern, $replacement, $string);
...