php preg_replace 100% 变成 100;%
php preg_replace 100% becomes 100;%
我已经为此工作了一段时间但没有成功。所以我寻求帮助。
我有:
我有一系列正在寻找的各种图案,因此我可以替换它们。阵列中的所有其他项目都可以正常工作。这些替换字符串中只有一个执行了我以前从未见过的操作。
字符串是:
width_(\d+\w+)=width: ;
当通过爆炸在等号上分解时:
$a = explode( '=', $replacement_string );
这变成:
$a[0] = "width(\d+\w+)";
和
$a[1] = "width: ;";
然后根据传入的字符串对其进行测试。
$a = preg_replace( "/$a[0]/i", "$a[1]", $incoming_string );
现在是 "I have no idea why it is doing this" 部分。如果传入的字符串是
"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%;".
感谢 Chris 和 Uby 的帮助。
您的正则表达式 \d+\w+
不包括百分比字符 %
。因此替换将简单地忽略它并仅将 width_100
替换为 width: 100;
.
尝试用 (\d+[a-zA-Z0-9_%]+)
替换 (\d+\w+)
您可以在此处查看当前问题:https://regex101.com/r/xD9rG3/1
%
不匹配,因此保留在其中。您可以告诉正则表达式使用此表达式查找 %
或 px
。
width_(\d+(?:px|%))
功能演示:
$replacement_string = 'width_(\d+(?:px|%|em))=width: ;';
$a = explode( '=', $replacement_string );
//$a[0] = "width(\d+\w+)";
//$a[1] = "width: ;";
$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
请求。
我已经为此工作了一段时间但没有成功。所以我寻求帮助。
我有:
我有一系列正在寻找的各种图案,因此我可以替换它们。阵列中的所有其他项目都可以正常工作。这些替换字符串中只有一个执行了我以前从未见过的操作。
字符串是:
width_(\d+\w+)=width: ;
当通过爆炸在等号上分解时:
$a = explode( '=', $replacement_string );
这变成:
$a[0] = "width(\d+\w+)";
和
$a[1] = "width: ;";
然后根据传入的字符串对其进行测试。
$a = preg_replace( "/$a[0]/i", "$a[1]", $incoming_string );
现在是 "I have no idea why it is doing this" 部分。如果传入的字符串是
"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%;".
感谢 Chris 和 Uby 的帮助。
您的正则表达式 \d+\w+
不包括百分比字符 %
。因此替换将简单地忽略它并仅将 width_100
替换为 width: 100;
.
尝试用 (\d+[a-zA-Z0-9_%]+)
(\d+\w+)
您可以在此处查看当前问题:https://regex101.com/r/xD9rG3/1
%
不匹配,因此保留在其中。您可以告诉正则表达式使用此表达式查找 %
或 px
。
width_(\d+(?:px|%))
功能演示:
$replacement_string = 'width_(\d+(?:px|%|em))=width: ;';
$a = explode( '=', $replacement_string );
//$a[0] = "width(\d+\w+)";
//$a[1] = "width: ;";
$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
请求。