我想替换它:
<!-- <#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代码。
答案 0 :(得分:3)
我想你想要这样的东西,
/<!-- <#Window#>[^\n]*\n\K.*(?=\n\s*<!-- </#Window#> --!>)/gs
使用上面的正则表达式来匹配字符串<!-- <#Window#> -->
之间存在的字符,并将匹配的字符替换为您想要的字符串。
<?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
参见演示。