Regex / PHP:如何从特殊模式中删除换行符

时间:2013-12-18 09:07:31

标签: php regex line-breaks

我从模板文件中的标记中删除换行符时遇到了另一个问题 - 我必须解析的模板看起来像这样:

<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

非常感谢你。

最好的问候, 路波

2 个答案:

答案 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