2011-08-04 54 views
1

我想更换更换匹配不区分大小写的假设组合:正则表达式与匹配+插件

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

如何

text StmiXx and some more mIxx text 

正则表达式替换后这可以用正则表达式来完成吗?我也想用(Linux)sed试试这个,或者还有egrep,grep的方法。

egrep有一个选项--color = always但不是自定义高亮。

回答

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来引用我们模式中唯一的捕获组。

+0

不客气。如果我的答案解决了您的问题,请随时通过点击答案左侧的投票计数下方的空白勾号图标来接受此问题。 – Shef

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); 
+0

谢谢罗宾,我希望正则表达式很快,因为我得到的txt文件平均大小约为5 MB。 – broadband

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' 
+0

还有一个选项可以打印前10场比赛。我看着男人sed,信息sed,http://sed.sourceforge.net/sed1line.txt。对于反向匹配,我在[^ mM] – broadband

+0

中添加^或者egrep的前n个匹配项具有-m NUM选项。 – broadband

+0

@broadand:如果您想打印前10场比赛,请添加'|最后的-n 10“;-)。 – jfg956