【发布时间】:2016-01-02 23:47:48
【问题描述】:
我有这样的字符串:
// example
$str1 = " 10.503 GB 3.4 GiB ";
$str2 = " 40.29 KiB ";
$str3 = "14.3 GB 2.1 51 ";
这是我的正则表达式,分别匹配字符串“10.503 GB”、“3.4 GiB”、“40.29 KiB”和“14.3 GB”
$regex = '/(\d+\.\d+ [A-Za-z]+[^\s])/';
preg_match_all($regex, $str1, $out1);
preg_match_all($regex, $str2, $out2);
preg_match_all($regex, $str3, $out3);
所以问题是,我如何用用户定义的字符替换与我的正则表达式模式不匹配的非匹配字符?示例如下:
$char = 'A'; // assume this is user input
$str1 = " 10.503 GB 3.4 GiB ";
$str2 = " 40.29 KiB ";
$str3 = "14.3 GB 2.1 51 ";
/* preg_replace (or another preg_* magic here */
所以最后的字符串是
$str1 = "AAAAA10.503 GBAA3.4 GiBAAA";
$str2 = "AA40.29 KiBAAAA";
$str3 = "14.3 GBAAAAAAAAAAAAA";
我知道不使用 preg_replace 的解决方案,但只是假设 preg_replace 在这里是必要的(或者如果您愿意,也可以使用另一个 preg_*)
所以有可能吗?如果是,我该怎么做?
【问题讨论】:
-
如果不是PHP,还需要支持什么引擎?我想这个问题已经回答了。只有 Boost 可以使用条件替换模式正确地完成这项工作,其他的会产生不精确的输出(在每个不匹配之后有一个额外的
A)。看看另一个PHP regex demo。 -
@Casimir et Hippolyte 对我的问题给出了完美的答案 :) 也感谢 stribizhev 提供信息!
标签: php regex preg-replace