preg_replace使用PHP开始和结束文本的一部分

时间:2013-12-18 15:12:14

标签: php regex

我正试图找到一种方法来替换这样的文字:

text here ABC -some text here- CED text here

text here ABC -replaced text- CED text here

或-----------------------------------

text here ABC - some description here- CED text here

text here ABC - replaced text- CED text here

这意味着,我们将开始以“ABC”开头并以“CED”结尾的文本的一部分,用“替换文本”替换它们之间的所有文本。 我怎样才能做到这一点? 感谢。

2 个答案:

答案 0 :(得分:6)

要替换ABCCED之间的内容,您可以使用正面观察正面前瞻来保留 ABC < / em>和 CED ,只需将其替换为您想要的内容即可。如果两者之间的文字也包含换行符,则可以使用s修饰符强制点.也匹配换行符。

$str = 'text here ABC -some text here- 
CED text here';

$str = preg_replace('/(?<=ABC).*?(?=CED)/si', ' foo ', $str);
echo $str;

请参阅Working demo

正则表达式:

(?<=           look behind to see if there is:
 ABC           'ABC'
)              end of look-behind
 .*?           any character except \n (0 or more times)
 (?=           look ahead to see if there is:
  CED          'CED'
 )             end of look-ahead

答案 1 :(得分:2)

<?php
$myText = 'text here ABC -some text here- CED text here';
$myText = preg_replace('/ABC(.+)CED/', 'ABC - replaced text - CED', $myText);
echo $myText;

CodePad