Php 删除某些字符串前的空格
我可以想到“foreach string replace”这样做,但觉得regex replace方法会更快、更优雅,不幸的是,regex不是我最擅长的东西 我想拿一根这样的绳子Php 删除某些字符串前的空格,php,regex,Php,Regex,我可以想到“foreach string replace”这样做,但觉得regex replace方法会更快、更优雅,不幸的是,regex不是我最擅长的东西 我想拿一根这样的绳子 23 AB 5400 DE 68 RG 把它变成 23AB 5400DE 68RG 数字和后面字母之间的空格数通常为一,但可能是可变的 我有一个例子,那就是寻找组,但是我如何去掉替换中的空格呢 这是我尝试生成的代码 $re = '/(\d+ +)(AB|DE|RG|DU)/m'; $str = '23 AB 5400
23 AB 5400 DE 68 RG
把它变成
23AB 5400DE 68RG
数字和后面字母之间的空格数通常为一,但可能是可变的
我有一个例子,那就是寻找组,但是我如何去掉替换中的空格呢
这是我尝试生成的代码
$re = '/(\d+ +)(AB|DE|RG|DU)/m';
$str = '23 AB 5400 DE 68 RG
33 DU 88 DE 8723 AB
55 RG 76 AB 92 DE';
$subst = '\\1\\2';
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
试试正则表达式:(\d+)(AB|DE|RG|DU)
试试正则表达式:(\d+)(AB | DE | RG | DU)
您可以使用这个lookaround正则表达式:
$repl = preg_replace('/(?<=\d)\h+(?=\pL)/', '', $str);
您可以使用这个lookaround正则表达式:
$repl = preg_replace('/(?<=\d)\h+(?=\pL)/', '', $str);
你可以试试这个
$re = '/(\d+)\s+/';
$str = '23 AB 5400 DE 68 RG 33 DU 88 DE 8723 AB 55 RG 76 AB 92 DE';
$subst = '\\1\\2';
$result = preg_replace($re, $subst, $str);
print_r($result);
你可以试试这个
$re = '/(\d+)\s+/';
$str = '23 AB 5400 DE 68 RG 33 DU 88 DE 8723 AB 55 RG 76 AB 92 DE';
$subst = '\\1\\2';
$result = preg_replace($re, $subst, $str);
print_r($result);
另一个选择是:
\b\d+\K\h+(?=(?:AB | DE | RG | DU))\b
单词边界之间的匹配\b
:
匹配1+个数字\d+
忘记匹配的内容\K
正向前瞻以断言右侧的内容(?=
与所列值之一匹配的替换(?:AB | DE | RG | DU)
关闭正向前瞻)
$re = '/\b\d+\K\h+(?=(?:AB|DE|RG|DU))\b/';
$str = '23 AB 5400 DE 68 RG';
$result = preg_replace($re, '', $str);
echo $result; // 23AB 5400DE 68RG
另一个选择是:
\b\d+\K\h+(?=(?:AB | DE | RG | DU))\b
单词边界之间的匹配\b
:
匹配1+个数字\d+
忘记匹配的内容\K
正向前瞻以断言右侧的内容(?=
与所列值之一匹配的替换(?:AB | DE | RG | DU)
关闭正向前瞻)
$re = '/\b\d+\K\h+(?=(?:AB|DE|RG|DU))\b/';
$str = '23 AB 5400 DE 68 RG';
$result = preg_replace($re, '', $str);
echo $result; // 23AB 5400DE 68RG
除非我遗漏了什么,否则忽略数字,将任何非数字替换为前面的空格,并使用相同的文本替换为不带空格的文本似乎是不错的
$result = preg_replace('/\s+(\D+)/', '$1', $string);
i、 e.匹配任何类似于
“AB”
的内容,并将其替换为“AB”
除非我遗漏了什么,否则可以忽略数字,将任何非数字前面的空格替换为不带空格的相同文本
$result = preg_replace('/\s+(\D+)/', '$1', $string);
i、 e.匹配任何类似于
“AB”
,并将其替换为“AB”
哦,是的,这很有意义。谢谢哦,是的,这很有道理。谢谢感谢所有回答的人。所有答案都非常有用,但我选择这个作为答案,因为这是处理我的特定用例的最佳方式。@SportsRacer我不是regex专家,所以就效率而言,这很可能不是最佳方式。我通常只是简单的目标。;-)在这种情况下,简单就是我所需要的!感谢所有回答的人。所有答案都非常有用,但我选择这个作为答案,因为这是处理我的特定用例的最佳方式。@SportsRacer我不是regex专家,所以就效率而言,这很可能不是最佳方式。我通常只是简单的目标。;-)在这种情况下,简单就是我所需要的!