正则表达式匹配匹配+插件匹配

时间:2011-08-04 09:16:01

标签: php regex sed grep

我想替换不区分大小写的让我们说混合:

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 = always但不是自定义突出显示。

3 个答案:

答案 0 :(得分:2)

你很亲密!以下是如何在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 :(得分:1)

s="text StmiXx and some more mIxx text"
echo "$s" | sed -e 's!\([mM][iI][xX]\)!<font color="red">\1</font>!g'

修改

执行替换并仅打印匹配的行:

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

要获得前N行,您可以将其管道传输到:或

sed -n -e '1,10p'

答案 2 :(得分:0)

$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);