Php 使用regex和preg_替换删除字符串结尾
我想做一个简单的替换。我试图理解正则表达式,但对我来说它就像汉语。我读过,但坦率地说,这对我来说还是太复杂了 我得到了以下6个字符串(每行是一个单独的变量): 我想要的结果是将末端的零件移除:Php 使用regex和preg_替换删除字符串结尾,php,regex,preg-replace,Php,Regex,Preg Replace,我想做一个简单的替换。我试图理解正则表达式,但对我来说它就像汉语。我读过,但坦率地说,这对我来说还是太复杂了 我得到了以下6个字符串(每行是一个单独的变量): 我想要的结果是将末端的零件移除: Pyromancer 6,52 Pack Dreadnought Pack Citizen Pack Colonies - Pyromancer Pack Colonies - Dreadnought Pack Colonies - Citizen Pack 我通过反复试验尝试的是: $pattern
Pyromancer 6,52 Pack
Dreadnought Pack
Citizen Pack
Colonies - Pyromancer Pack
Colonies - Dreadnought Pack
Colonies - Citizen Pack
我通过反复试验尝试的是:
$pattern = '([0-9]+,[0-9]+€)';
$package_name = preg_replace($pattern, '', $package_name);
$pattern = '( - )';
$package_name = preg_replace($pattern, '', $package_name);
echo $package_name;
然而,这给了我以下结果:
Pyromancer 6,52 Pack
Dreadnought Pack
Citizen Pack
ColoniesPyromancer Pack
ColoniesDreadnought Pack
ColoniesCitizen Pack
有人愿意帮我指出我遗漏的最后一件事,那就是只改变最后的字符串吗
也可以将其放入一个替换函数中,而不是多次进行替换吗
更新:我在这里做了一把小提琴:这应该可以做到:
$pattern = '([0-9]+,[0-9]++€)';
$package_name = preg_replace($pattern, '', $package_name);
$package_name = trim($package_name, "-");
echo $package_name;
使用trim()剪下最后一个“-”这应该可以做到:
$pattern = '([0-9]+,[0-9]++€)';
$package_name = preg_replace($pattern, '', $package_name);
$package_name = trim($package_name, "-");
echo $package_name;
使用trim()剪切最后一个“-”这将在一个正则表达式中获得所有组合:(从小提琴上更新) 下面是正在运行的正则表达式: 下面是您在评论中提供的小提琴的代码: 正则表达式的解释: 获取“-”,后跟数字,后跟欧元符号 或 在一行末尾获取“-”
然后将其替换为nothing(无)这将在单个正则表达式中获得所有组合:(从您的小提琴中更新) 下面是正在运行的正则表达式: 下面是您在评论中提供的小提琴的代码: 正则表达式的解释: 获取“-”,后跟数字,后跟欧元符号 或 在一行末尾获取“-” 然后将其替换为“无”这是我的尝试:
$pattern = '/\s*-\s*([0-9]+(,[0-9]+)?€)?$/';
$package_name = preg_replace($pattern, '', $package_name);
不确定$package的名称是什么。如果是多行段落,那么可以使用preg_replace_all
下面是演示:
它将匹配的内容:
-
- 34€
- 3500000€
- 3,39€
- 3,3999999€
它不会匹配:
- ,99€ (nothing before ,)
- 3, (nothing after ,)
- 3 (no euro sign)
编辑:空格修复(-前后可以有多个空格或没有空格)。这是我的尝试:
$pattern = '/\s*-\s*([0-9]+(,[0-9]+)?€)?$/';
$package_name = preg_replace($pattern, '', $package_name);
不确定$package的名称是什么。如果是多行段落,那么可以使用preg_replace_all
下面是演示:
它将匹配的内容:
-
- 34€
- 3500000€
- 3,39€
- 3,3999999€
它不会匹配:
- ,99€ (nothing before ,)
- 3, (nothing after ,)
- 3 (no euro sign)
编辑:空格修复(-前后可以有多个空格或没有空格)。如果我正确理解您的问题,您希望删除最后一个
-
和负号之后的所有内容
你不需要正则表达式!只需确定最后一个-
的位置,在此位置剪切字符串,并对结果应用rtrim()
,以去除最后的空白:
$position = strrpos($package_name, '-');
$package_name = substr($package_name, 0, $position - 1);
$package_name = rtrim($package_name);
这比公认的答案要普遍得多。如果您想:
$pattern = '/\s*-[^-]+$/';
$package_name = preg_replace($pattern, '', $package_name);
更简单,可以处理字符串的每个结尾。如果我正确理解您的问题,您希望删除最后一个
-
和负号之后的所有内容
你不需要正则表达式!只需确定最后一个-
的位置,在此位置剪切字符串,并对结果应用rtrim()
,以去除最后的空白:
$position = strrpos($package_name, '-');
$package_name = substr($package_name, 0, $position - 1);
$package_name = rtrim($package_name);
这比公认的答案要普遍得多。如果您想:
$pattern = '/\s*-[^-]+$/';
$package_name = preg_replace($pattern, '', $package_name);
更简单,可以处理字符串的每个结尾。我在这里做了一把小提琴:我在这里做了一把小提琴:感谢您添加到解决方案中。感谢您添加到解决方案中。感谢您添加到解决方案中。很高兴知道trim()可用作备份解决方案。感谢您添加到该解决方案中。很高兴知道trim()可用作备份解决方案。我认为这是一种更好的方法。您不需要先使用strpos,然后再使用substr,不过php有自己的函数:。因此,可以通过
rtrim($package_name,strrchar($package_name,'-'))轻松完成代码>感谢您添加到解决方案中。我认为这是一种更好的方法。您不需要先使用strpos,然后再使用substr,不过php有自己的函数:。因此,可以通过rtrim($package_name,strrchar($package_name,'-'))轻松完成代码>感谢您添加到解决方案中。