php preg_replace 100%变成100;%

Q_45

我已经为此工作了一段时间,但没有成功。所以我正在寻求帮助。

是)我有的:

我正在寻找各种模式,因此可以替换它们。数组中的所有其他项目都可以正常工作。这些替换字符串中只有一个可以完成我以前从未见过的事情。

字符串是:

width_(\d+\w+)=width: $1;

当通过等号在等号上分解时:

$a = explode( '=', $replacement_string );

变成:

$a[0] = "width(\d+\w+)";

$a[1] = "width: $1;";

然后针对传入的字符串对此进行测试。

$a = preg_replace( "/$a[0]/i", "$a[1]", $incoming_string );

现在,“我不知道为什么要这么做”部分。如果传入的字符串是

"width_100px"

我回来

"width: 100px;"

但是如果传入的字符串是

"width_100%"

我回来

"width: 100;%"

奇怪的是-如果我刚回来

"width: 100;"

我能理解。“%”与分号(;)相匹配。但这会将分号置于AND百分号中。只是它们是相反的。我什至尝试查看是否有百分号并将其更改为

"width_100\%"

但这并没有改变结果。

我还尝试了“ %%”,而不是一个“%”。还是出来

width: 100;%

任何帮助表示赞赏。

回答:

这个难题的答案是正则表达式的“ \ w”部分与百分号(%)匹配,因为\ w只是[a-zA-Z0-9 _](如下面的Uby所示。这些字符串被分解为单独的请求,width_100%本身就是所有,因此通过将其寻找的内容更改为(\ d +(。*))(按照下面Chris85的建议)-这样就可以捕获数字(在这种情况下, 100)以及百分号,因此我可以将其转换为“ width:100%;”。

谢谢克里斯和乌比的帮助。

克里斯85

您可以在此处查看当前问题:https : //regex101.com/r/xD9rG3/1

%不匹配,因此在离开了。你可以告诉正则表达式来查找%px与此表达。

width_(\d+(?:px|%))

功能演示:

$replacement_string = 'width_(\d+(?:px|%|em))=width: $1;';
$a = explode( '=', $replacement_string );
//$a[0] = "width(\d+\w+)";
//$a[1] = "width: $1;";
$incoming_string = 'width_100%';
$a = preg_replace( "/$a[0]/", "$a[1]", $incoming_string);
echo $a;

正则表达式101演示:https : //regex101.com/r/xD9rG3/2

另外,您还应该注意,其中\w包括一个下划线,因此您的其他正则表达式可能会失败。如果您只想查找字母字符,请使用[a-zA-Z]+或添加,\d如果要包括数字。

您不可以使用的另一个正则表达式是:

width_(\d+.*)

这表示先查找width_任意数量的数字,然后再查找其他所有字符。这可能会为您生成无效的CSS。不过,这将符合您的whatever the part is after the number要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章