2013-05-13 42 views
0

我有一個字符串,一個是PHP的正則表達式的幫助更換

[my_name] and another being <my_name> 

我需要使用正則表達式來與BOB搜索[]和<>括號內的任何文字和替換特定符號內的文本

我會提供示例代碼,但我甚至不知道從哪裏開始。任何幫助,將不勝感激

到目前爲止IV只是嘗試這樣做

$regex = [\^[*\]] 

想這將尋找在[]標籤什麼

+6

你有甚至試圖有點了解如何使用正則表達式? – Jerry 2013-05-13 17:11:34

+1

@Jerry來吧,冷靜。這些問題對某些人來說可能是一個挑戰。我發現StackOverflow也是提高自己技能的好地方。 – vikingmaster 2013-05-13 17:14:50

+3

@Jari如果你不知道從哪裏開始使用正則表達式,那麼你至少應該學習*東西*。所以OP中顯示出一些努力的問題更好地被接受。 – 2013-05-13 17:16:11

回答

1

我想,下面應該工作:

preg_replace('/([\[<])[^\]>]+([\]>])/', "$1BOB$2", $str); 

正則表達式的解釋:

([\[<]) -> First capturing group. Here we describe the starting characters using 
      a character class that contains [ and < (the [ is escaped as \[) 
[^\]>]+ -> The stuff that comes between the [ and ] or the <and>. This is a 
      character class that says we want any character other than a ] or >. 
      The ] is escaped as \]. 
([\]>]) -> The second capturing group. We we describe the ending characters using 
      another character class. This is similar to the first capturing group. 

替換模式使用反向引用來引用捕獲組。 $1表示第一個捕獲組,其可以包含[<。第二捕獲組由$2表示,其可以包含]>

+0

我添加了結尾分隔符。 – vikingmaster 2013-05-13 17:29:55

+0

這工作謝謝你 – Yeak 2013-05-13 17:43:32

1
$str = "[my_name] and another being <my_name>"; 
$replace = "BOB"; 

preg_replace('/([\[<])[^\]]*([\]>])/i', "$1".$replace."$2", $str); 
+0

我不認爲這會奏效。這取代了與「BOB」匹配的任何內容。 – 2013-05-13 17:35:18

1
要在這裏使用 preg_replace_callback

是一個簡單的例子

$template = "Hello [your_name], from [my_name]"; 
$data = array(
    "your_name"=>"Yevo", 
    "my_name"=>"Orangepill" 
); 

$func = function($matches) use ($data) { 
    print_r($matches); 
    return $data[$matches[1]]; 
}; 

echo preg_replace_callback('/[\[|<](.*)[\]\)]/U', $func, $template); 
+0

爲什麼不修改原來的答案而不是添加新的答案? – 2013-05-13 17:45:59

+0

我會刪除舊的...保留它,因爲我認爲這可能對某人有用。 – Orangepill 2013-05-13 17:55:50