2017-10-14 183 views
0

我有正確的功能,只是沒有找到正確的正則表達式模式從字符串中刪除(ID:999999)。此ID值可能會有所不同,但都是數字。我喜歡刪除包括括號在內的所有內容。尋找使用preg_replace從我的字符串中刪除字符

$string = "This is the value I would like removed. (ID:17937)"; 
$string = preg_replace('#(ID:['0-9']?)#si', "", $string); 

正則表達式是不是更多的拿手好戲!並且需要這個幫助。

+0

''0-9''在一個單引號字符串中?你必須學習編程的基礎知識,所以SO不是這樣做的(在我看來)。 –

回答

1

試試這個:

$string = preg_replace('# \(ID:[0-9]+\)#si', "", $string); 

你需要用反斜槓\逃脫括號。
您不應該在數字範圍內使用引號。
您應該使用+(一個或多個)而不是?(零個或一個)。
您可以在開始時添加空格,以避免在結果字符串的末尾留出空格。

0

在PHP中的正則表達式是/,而不是#,在那之後,括號裏的捕捉組,所以你必須逃脫他們與它們匹配。

也可以使用preg_replace替換你將需要使用捕獲組,所以在你的情況下,/(\(ID:[0-9]+\))/si將是一個很好的正則表達式。

0

這裏有兩種選擇:

代碼:(Demo

$string = "This is the value I would like removed. (ID:17937)"; 
var_export(preg_replace('/ \(ID:\d+\)/',"",$string)); 

echo "\n\n"; 

var_export(strstr($string,' (ID:',true)); 

輸出:(我以前var_export()表明,該技術是 「乾淨」 的,並沒有給出尾部空格)

'This is the value I would like removed.' 

'This is the value I would like removed.' 

部分要點:

  • 如果您的ID子字符串可以存在於字符串中的任何位置,則Regex是更好/更靈活的解決方案。
  • 如果您使用簡寫範圍字符\d,則您的正則表達式模式不需要字符類。
  • 正則表達式一般來說只能在標準字符串函數不足或者證明對特定情況更有效的情況下使用。
  • 如果您的ID子字符串總是出現在字符串的末尾,strstr()是一個優雅/完美的函數。
  • 我的兩種方法都在ID之前寫了(空格)以使輸出變得乾淨。
  • 你不需要任何si修飾你的模式,因爲只有s事項如果使用.(點)和你的ID大概總是大寫的,所以你並不需要區分大小寫的搜索。