Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 将px添加到顶部和左侧阁楼_Php_Regex - Fatal编程技术网

Php 将px添加到顶部和左侧阁楼

Php 将px添加到顶部和左侧阁楼,php,regex,Php,Regex,所以我得到了这个程序,它给了我一些带有内联样式的html输出 它通常如下所示: <DIV style="position:absolute;top:126;left:324"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV> <DIV style="position:absolute;top:126;left:386">&l

所以我得到了这个程序,它给了我一些带有内联样式的html输出

它通常如下所示:

<DIV style="position:absolute;top:126;left:324"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126;left:386"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:324px"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:386px"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
$html=preg_replace('/(.+)(left|top|bottom|right):([\d]+)(.+)/i','$1$2:$3px;$4',$html);
2011
2010
现在我知道这是一团糟,但这是我得到的,改变它现在不是一个选择。然而,我需要做的是在top和height属性之后获得一个regexp来输入px。所以我想要的是这样的:

<DIV style="position:absolute;top:126;left:324"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126;left:386"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:324px"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:386px"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
$html=preg_replace('/(.+)(left|top|bottom|right):([\d]+)(.+)/i','$1$2:$3px;$4',$html);
2011
2010
html作为一个长字符串输出,因此我需要找到所有出现的top和left,并在数值后添加px。我一直在尝试许多不同的解决方案,但仍然无法正确地解决。如果有人能帮我找到正确的regexp,那就太好了。我很讨厌那种东西。

你试过这个吗

$html=str_replace(';left:','px;left:',$html);
$html=str_replace('"><nobr>','px"><nobr>',$html);
$html=str_replace(';左:','px;左:',$html);
$html=str_replace(“>”、“px”>”、$html);

我想你需要这样的东西:

<DIV style="position:absolute;top:126;left:324"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126;left:386"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:324px"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV>
<DIV style="position:absolute;top:126px;left:386px"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV>
$html=preg_replace('/(.+)(left|top|bottom|right):([\d]+)(.+)/i','$1$2:$3px;$4',$html);
我没有测试过,但我认为正则表达式写得很好

$html = preg_replace('%(top|left|right|bottom)(:[0-9]{1,4})(;|")%', '$1$2px$3', $html);
这应该搜索任何CSS位置关键字,后跟冒号、数字(1-4位数)、双引号(
)或分号(

然后,它将取下所有三个部分(括号内的部分),并在正确的位置用
px
将它们缝合在一起


一个比Febi更合适的答案是:

$html = preg_replace("/(?:left|top|right|bottom|width|height)\s*:\s*\d+/","$0px",$html);

为什么要捕获模式前后的所有内容?是否希望PCRE_回溯_错误?因为,我认为如果我不捕获所有内容,所有其他数据都将丢失并仅返回:\d+您是否曾费心阅读?这就像是
str_replace
,但使用正则表达式。我已经阅读了。但有一次,我记不清p是什么问题是,它并不是只在模式下工作。如果在不捕获所有内容的情况下工作,当然会更好:)除非内存耗尽。