希望使用 preg_replace 从我的字符串中删除字符

Looking to use preg_replace to remove characters from my strings

我有正确的功能,只是没有找到正确的正则表达式模式来从字符串中删除 (ID:999999)。此 ID 值各不相同,但都是数字。我喜欢删除所有内容,包括括号。

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

正则表达式不是更厉害!需要这方面的帮助。

试试这个:

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

您需要使用反斜杠转义括号 \
您不应在数字范围内使用引号。
您应该使用 +(一个或多个)而不是 ?(零或一个)。
您可以在开头添加一个 space,以避免在结果字符串的末尾有一个 space。

在 PHP 中,正则表达式在 / 而不是 # 中,之后,括号用于捕获组,因此您必须将它们转义以匹配它们。

还要使用 preg_replace 替换,您需要使用捕获组,因此在您的情况下 /(\(ID:[0-9]+\))/si 将是一个很好的正则表达式。

这里有两个选项:

代码:(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() 来表明该技术是 "clean" 并且没有尾随白色 spaces)

'This is the value I would like removed.'

'This is the value I would like removed.'

几点:

  • 如果您的 ID 子字符串可以存在于字符串中的任何位置,则正则表达式是更好/更灵活的解决方案。
  • 如果您使用 shorthand 范围字符 \d.
  • ,则您的正则表达式模式不需要字符 class
  • 正则表达式 一般来说 只应在标准字符串函数不能满足要求或被证明对特定情况更有效时使用。
  • 如果您的 ID 子字符串总是出现在字符串的末尾,strstr() 是一个 elegant/perfect 函数。
  • 我的两种方法都在ID之前写一个</code> (space)以使输出干净。</li> <li>您的模式不需要 <code>si 修饰符,因为 s 仅在您使用 .(点)和 ID 可能总是大写,因此您不需要不区分大小写的搜索。