通过传递特定模式替换中间字符串

时间:2017-07-05 13:07:39

标签: php string

我想通过传递模式来替换中间字符串。我已经通过使用pre_replace函数尝试了它。但它不适合我。

   $str = "Lead for Nebhub - Admark
          Name: Punam Kalbande
          Email: kalbandepunam@gmail.com
          Phone Number: 800-703-3209
          Nebhub Partner : Nebhub - Admark
          Address: PO Box 830395 Miami, FL 33173
          Hub : Automotive
          Products: ERP, CRM, HCM, Help Desk, Marketing";
  $pattern = '/^Hub :(.+)Products:$/i';
  $replacement = "Logistics";
  $result = preg_replace($pattern, $replacement, $str);

但上面的代码只返回原始字符串。它不会取代新的。

1 个答案:

答案 0 :(得分:1)

模式中缺少s-Modifier。此外,您希望匹配文本中间某处的模式。您使用了^,表示行的开头,$表示行的结束。这意味着,整个String必须匹配。使用此正则表达式,它将适合您。

/(Hub :)[^\n]+/is

说明:

(        start Subpattern
Hub      the Word Hub
         followed by a space
:        followed by a Doubledot 
)        end Subpattern -> accessible by $1 or \1
[^\n]+   match one or more Characters except a Linebreak

i        Modifier for caseinsensitive Search
s        Modifier to include Linebreaks

您现在要做的是在替换中输出子模式:

$result = preg_replace($pattern, "$1$replacement", $str);