PHP Replace Between Tags

2019-03-05 12:16发布

问题:

I am looking for a quick way to replace text in a string that is between two tags.

The string contains <!-- Model # Start -->  <!-- Model # End -->  Tags.  

I just want to replace what is between the tags, I believe preg_replace() will do this but I am not sure how to make it work.

回答1:

To use preg_replace, pass in the original string and a regular expression - the matching result will be returned. There is not much more to say about that method as you need to understand regular expressions to use it.

Here is a programatic solution, possibly not the most efficient code, but gives you an indication of what it is doing.

$tagOne = "[";
$tagTwo = "]";
$replacement = "Greg";

$text = "Hello, my name is [NAME]";

$startTagPos = strrpos($text, $tagOne);
$endTagPos = strrpos($text, $tagTwo);
$tagLength = $endTagPos - $startTagPos + 1;

$text = substr_replace($text, $replacement, $startTagPos, $tagLength);

echo $text;

Outputs: Hello, my name is Greg.



回答2:

$tagOne = "[";
$tagTwo = "]";
$replacement = "Greg";

$text = "Hello, my name is [NAME] endie ho [NAME] \n [NAME]";

$textLength = strlen($text);


for ($i; $i< $textLength; $i++) {

  $startTagPos = strrpos($text, $tagOne);
  $endTagPos = strrpos($text, $tagTwo);
  $tagLength = $endTagPos - $startTagPos + 1;
  if ($startTagPos<>0) $text = substr_replace($text, $replacement, $startTagPos, $tagLength); 
}

echo $text;

Please note, the if statement that checks if there is a tag pos left, otherwise, for all the textlength - # of tags, your start position of 0, in this case 'H', will get gregs :)

The above outputs

Hello, my name is Greg endie ho Greg Greg