我的PHP RegEx不适用于<字符

时间:2014-09-11 11:42:43

标签: php regex

我想替换它:

<!-- <#Window#> -->
...<div>Something</div>...
<!-- </#Window#> -->

用这个:

<!-- <#Window#> -->
...Some new <span>...
<!-- </#Window#> -->

我尝试使用RegEx,并使用以下表达式:

<!-- <#Window#>\K[^<]*(?=<!-- </#Window#> --!>)

如果序列的开头和结尾之间没有<个字符,则它可以正常工作。 (没有div,span,html标签)

我怎样才能让它发挥作用?

编辑:

我尝试使用带有PHP的Avinash Raj和vks解决方案,只有当1行在开始和结束序列之间时才有效。不知道为什么?

$contents = file_get_contents($FileNamePHP);
$search = '~(<!--\s*<#Window#>\s*-->.)(.*?)(.<!--\s*<\/#Window#>\s*-->)~';
$code = RenderGridWindow($TableName, $WindowOptions);
$contents = preg_replace($search, $code, $contents, -1, $count);

为了更好的解释,源代码是

<!-- <#Window#> -->
<div><span>something</span></div>
<!-- </#Window#> -->

有效,但不是

<!-- <#Window#> -->
<div>
<span>something</span>
</div>
<!-- </#Window#> -->

Edited2

它适用于Avinash Raj PHP代码。

2 个答案:

答案 0 :(得分:3)

我想你想要这样的东西,

/<!-- <#Window#>[^\n]*\n\K.*(?=\n\s*<!-- </#Window#> --!>)/gs

使用上面的正则表达式来匹配字符串<!-- <#Window#> -->之间存在的字符,并将匹配的字符替换为您想要的字符串。

DEMO

<?php
$string = <<<EOT
    <!-- <#Window#> --!>
   asdasd
   <div>
   dggfgf
   gdxsghxgf
    <!-- </#Window#> --!>
EOT;
$pattern = "~<!-- <#Window#>[^\n]*\n\K.*(?=\n\s*<!-- </#Window#> --!>)~s";
$replacement = "       ...Some new <span>...";
echo preg_replace($pattern, $replacement, $string);
?>

输出:

    <!-- <#Window#> --!>
   ...Some new <span>...
    <!-- </#Window#> --!>

答案 1 :(得分:0)

(<!--\s*<#Window#>\s*-->.)(.*?)(.<!--\s*<\/#Window#>\s*-->)

你可以尝试这个。替换将是

$1<urcontent>$3

参见演示。

http://regex101.com/r/hQ1rP0/3