Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用regex和preg_替换删除字符串结尾_Php_Regex_Preg Replace - Fatal编程技术网

Php 使用regex和preg_替换删除字符串结尾

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

我想做一个简单的替换。我试图理解正则表达式,但对我来说它就像汉语。我读过,但坦率地说,这对我来说还是太复杂了

我得到了以下6个字符串(每行是一个单独的变量):

我想要的结果是将末端的零件移除:

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,'-'))轻松完成感谢您添加到解决方案中。