我从模板文件中的标记中删除换行符时遇到了另一个问题 - 我必须解析的模板看起来像这样:
<html>
<style>
body { color: black }
div {
background-color:#fff;
}
<!-- i need to remove the line breaks within {_WP_token[*]} for parsing //-->
<h4>{_WP_token[id="42";class="foo"; style="border:4px solid
green;padding:20px"; onclick="(this.value=confirm('foo'));"]}</h4>
<script>
function() {
console.log('my foo is my castle');
}
</script>
我在没有突破的情况下尝试了自己。我刚刚成功创造了一个贪婪的人,它吃掉了令牌的前半部分 - 这就是:
preg_replace("/(\{_(.*?)(.*\s))/ix", "[LB REMOVED]", $htmlTemplate);
返回
<html>
<style>
body { color: black }
div {
background-color:#fff;
}
<!-- it just ate up the first half of my token ! //-->
<h4>[LB_REMOVED]green;padding:20px"; onclick="(this.value=confirm('foo'));"]}</h4>
<script>
function() {
console.log('my foo is my castle');
}
</script>
我在这里做了一个小提琴:http://www.phpliveregex.com/p/2EZ
非常感谢你。
最好的问候, 路波
答案 0 :(得分:0)
尝试:
$newString = preg_replace("/[\n\r]/","[LB_REMOVED]", $originalString);
答案 1 :(得分:0)
我不确定我是否理解正确。如果你想改变
<h4>{_WP_token[id="42";class="foo"; style="border:4px solid
green;padding:20px"; onclick="(this.value=confirm('foo'));"]}</h4>
到
<h4>{_WP_token[id="42";class="foo"; style="border:4px solid green;padding:20px"; onclick="(this.value=confirm('foo'));"]}</h4>
然后你可以使用这个
\{_(.*)[\r\n]+
并替换为$ 1,See it on Regexr
preg_replace("/\{_(.*)[\r\n]+/", "$1", $htmlTemplate);
我删除了所有修饰符,因为你没有使用它们。 See Modifiers doc