Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帮助使用去除前导空白的正则表达式_Php_Html_Regex_Kohana - Fatal编程技术网

Php 帮助使用去除前导空白的正则表达式

Php 帮助使用去除前导空白的正则表达式,php,html,regex,kohana,Php,Html,Regex,Kohana,我正在修改Kohana库的一个核心函数,函数 该函数将自己描述为“类固醇上的nl2br()。本质上,它提供了单行换行符,但双线换行符被标记包围 我发现它的局限性在于,它只能在 $str = preg_replace('~^[ \t]+~m', '', $str); 我不是最好的正则表达式大师,但我很确定上面说的是“在至少有一个前导空格和制表符的地方获取前导空格和制表符,并用空字符串替换它们。” 我已经尝试删除这一行,但是它会在我绝对不想要它们的地方添加——在一个例子中,我得到这样的输出 $st

我正在修改Kohana库的一个核心函数,函数

该函数将自己描述为“类固醇上的nl2br()。本质上,它提供了

单行换行符,但双线换行符被
标记包围

我发现它的局限性在于,它只能在

$str = preg_replace('~^[ \t]+~m', '', $str);
我不是最好的正则表达式大师,但我很确定上面说的是“在至少有一个前导空格和制表符的地方获取前导空格和制表符,并用空字符串替换它们。”

我已经尝试删除这一行,但是它会在我绝对不想要它们的地方添加

——在一个例子中,我得到这样的输出

$str = preg_replace(
    '~^[ \t]++(?=(?:[^<]++|<(?!/?+pre\b))*+(?:\z|<pre\b))~im',
    '', $str);

  • 某物
如何修改此正则表达式或代码,使其不删除
元素中的前导空格

(?:[^<]++|<(?!/?+pre\b))*+
。(滚动至最下方)

我知道我会得到一些“使用HTML解析器”类型的答案——尽管你可能是对的——现有代码只是使用正则表达式,我更喜欢一个更简单的解决方案(我不需要包含库等)


谢谢您的时间。

以下是我的做法:


正确平衡标签。SGML注释中的标记也会把事情搞砸——除非它们恰巧是平衡的。如果你不介意将正则表达式的长度增加两倍,丑陋程度增加三倍,你也可以处理评论

我会这样做:

正确平衡标签。SGML注释中的标记也会把事情搞砸——除非它们恰巧是平衡的。如果你不介意将正则表达式的长度增加两倍,丑陋程度增加三倍,你也可以处理评论

这是一个很好的答案(我会马上尝试)+1(包括半衰期参考):)这是一个很好的答案(我会马上尝试)+1(包括半衰期参考):)
(?:[^<]++|<(?!/?+pre\b))*+