我需要使用 PHP 从两个字符串之间删除非字母数字字符。
输入:
名称="K9 Mk. II"
建成=2015.06.15
名称="伊丽兹女王三世(殿下)"
预期产出:
名称="K9MkII"
建成=2015.06.15
名称="女王伊丽兹第三殿下"
我的代码:
$contents = file_get_contents("input.txt");
$contents = preg_replace('/name='"[^A-Za-z0-9]'"/', "name='"''1'"", $contents);
编辑:它应该只从name="和"之间删除不需要的字符。包含 built=2015.06.15 的行应保持不变。
与往常一样,非常感谢您的帮助。
WtS
这是您正在寻找的模式 -
[^name='w'"]
这不包括"name="、单词字符和空格。在这里查看它的实际效果
您也可以使用返回值代替实际替换 -
$content = preg_replace('/[^name='w'"]/', '$1', $content);
因为'$1'
将根据需要保留报价。
使用 preg_replace_callback:
$arr = array('name="K9 Mk. II"','name="Queen Eliz. 3rd (HRH)"');
foreach($arr as $str) {
$str = preg_replace_callback('/(?<=name=")([^"]+)(?=")/',
function ($m) {
return preg_replace("/'W+/", "", $m[1]);
},
$str);
echo $str,"'n";
}
输出:
name="K9MkII"
name="QueenEliz3rdHRH"
您可以使用 PHP 的 preg_replace_callback() 首先匹配名称,方法是使用: /name="([a-z0-9]+)"/i
然后调用一个函数来删除每个匹配项中的空格。
> $output = preg_replace('/[^''da-z]/i', '', $InputString);
这里我的意思是不区分大小写。
$InputString是您提供的输入。
$output包含我们想要的结果