2017-10-14 76 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大概总是大写的,所以你并不需要区分大小写的搜索。