如何使用 Preg_replace 将 TOWER 2_3_C 替换为 T2_C

how to replace TOWER 2_3_C with T2_C using Preg_replace

我想用 preg_replace 替换我的字符串。我要替换:

TOWER 2_3_C

T2_C

实际上我想得到第一个字母并删除第二个小数。 为此,我使用了:

return preg_replace('/([A-Z]). * ? (. * ?)_(.*?)_(.*?)/', '-', $a);

但它不起作用。

有什么想法吗??

这应该可以做到。鉴于字符串,您可能希望使其更严格。

$string = 'TOWER 2_3_C';
echo preg_replace('/([A-Z]).*?(\d+?_).*?([A-Z])/', '', $string);

Regex101 演示:https://regex101.com/r/iX9dP5/1

这不是 remove the second number with its under score。这会找到一个 A-Z,直到一个数字,(如果你只想要一个放置的值,让它成为 \d)下一个下划线,然后是第一个 A-Z 之前的任何东西。这是区分大小写的当前使用 i 修饰符或将 a-z 添加到字符 类.

在您的正则表达式中,您遇到了空格问题。例如:

. * ?

. 是单个字符, * 是零个或多个空格, ? 是可选空格(不能让空格出现在出于某种原因代码突出显示,  是空白实体)。量词必须是前面的字符才能量化该字符。