PHP 删除两个字符串之间的所有非字母数字字符

PHP to remove all non-alphanum characters between two strings

我需要使用 PHP 从两个字符串之间删除非字母数字字符。

输入:

name="K9 Mk. II"

built=2015.06.15

name="Queen Eliz. 3rd (HRH)"

预期输出:

name="K9MkII"

built=2015.06.15

name="QueenEliz3rdHRH"

我的代码:

$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='、单词字符和空格。查看实际效果 here

您也可以使用 return 值而不是实际替换 -

$content = preg_replace('/[^name=\w\"]/', '', $content);

因为 '' 会在您需要时保留引号。

您可以使用 PHP 的 preg_replace_callback() 通过以下方式首先匹配名称:/name="([a-z0-9]+)"/i 然后调用函数删除每个匹配项中的空格。

$output = preg_replace('/[^\da-z]/i', '', $InputString);



这里我的意思是不区分大小写。

$InputString 是您提供的输入。
$output 包含我们想要的结果

使用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"