我已经为此工作了一段时间,但没有成功。所以我正在寻求帮助。
是)我有的:
我正在寻找各种模式,因此可以替换它们。数组中的所有其他项目都可以正常工作。这些替换字符串中只有一个可以完成我以前从未见过的事情。
字符串是:
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%;”。
谢谢克里斯和乌比的帮助。
您可以在此处查看当前问题: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] 删除。
我来说两句