2010-03-27 31 views
27

我試圖採取文本字符串,像這樣:使用preg_replace的PHP:「分隔符不能是字母數字或反斜槓」錯誤。

$string = "This (1) is (2) my (3) example (4) text"; 

在每一個實例,其中有括號內的正整數,我想替換成簡單的整數本身。

我現在使用的代碼是:

$result = preg_replace("\((\d+)\)", "$0", $string); 

但我不斷收到一個「分隔符不能是字母,數字或反斜線」的錯誤。

有什麼想法?我知道這裏有其他問題可以回答這個問題,但是我對正則表達式的瞭解還不足以將其轉換爲此示例。

+3

如果任何人的疑惑,爲什麼所有的答案說時,他們已經在那裏添加反斜槓,那是因爲他們不顯示本來。 @Christopher,你應該總是格式化代碼示例(尤其是正則表達式!),方法是縮進四個空格或用反引號括起來。 – 2010-03-27 04:36:41

+0

謝謝 - 很高興知道! – Christopher 2010-03-29 04:07:55

+0

由於您剛接觸到stackoverflow,因此我想告訴您,您可以通過點擊該答案旁邊的複選標記來接受**您認爲最有用的答案。 – codaddict 2010-03-29 04:22:34

回答

1

檢查文檔 - 你需要你的模式之前和之後使用分隔符:"/\((\d+)\)/"

您也想逃避上面他們是文字,而不是一個嵌套的匹配組外括號。

請參見:preg_replace manual page

3

1)你必須有一個分隔符,則 '/' 工作正常。

2)你必須逃避'('和')'字符,所以它不認爲它是另一個分組。 3)另外,這裏的替換變量從1開始,而不是0(0包含全文匹配,其中包括圓括號)。

$result = preg_replace("/\((\d+)\)/", "\\1", $string); 

像這樣的東西應該工作。任何進一步的問題,請參閱PHP's preg_replace() documentation - 它確實很好。

0

嘗試:

<?php 
$string = "This (1) is (2) my (3) example (4) text"; 
$output = preg_replace('/\((\d)\)/i', '$1', $string); 
echo $output; 
?> 

括號字符是在正則表達式特殊字符。你需要逃避他們使用它們。

38

你幾乎在那裏。您正在使用:

$result = preg_replace("((\d+))", "$0", $string); 
  • 指定爲第一 參數preg_*家庭的功能 應該對 分隔符分隔的正則表達式。由於你沒有使用 任何分隔符,你會得到該錯誤。
  • ( and )是meta char在正則表達式中, 意思是它們有特殊含義。 既然你想匹配文字開放 括號和右括號, 你需要使用\轉義它們。 以下任何內容\字面上均視爲 。
  • 您可以使用\d+正確捕獲整數 。但捕獲的 整數將在$1而不是$0$0 將會有整個匹配,即括號內的整數爲 。

如果你做到以上的變化,你會得到:

$result = preg_replace("#\((\d+)\)#", "$1", $string); 
+0

+1爲詳細答案! :O – 2010-03-27 03:35:37

+1

Gotcha。所以分隔符可以是任何東西?我看到'#'和'/'都起作用。 – Christopher 2010-03-29 04:08:51

+1

是的,你也可以使用~~,@@,{},##,//,!!還有很多 :)。但通常我們使用一個沒有出現在模式中的分隔符。 – codaddict 2010-03-29 04:18:40

相關問題