希望使用preg_replace从我的字符串

时间:2017-10-14 22:39:11

标签: php regex preg-replace

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

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

正则表达不是更强大!需要帮助。

3 个答案:

答案 0 :(得分:1)

试试这个:

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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仅在您使用.(点)和{{1}时才重要可能总是大写,所以你不需要不区分大小写的搜索。