2011-08-04 53 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