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


preg replace - PHP to remove all non-alphanum characters between two strings

我需要使用 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包含我们想要的结果