我正在尝试做一个简单的替换。我试着理解正则表达式,但对我来说就像中文。我读过http://en.wikipedia.org/wiki/Regular_expression但坦率地说,这对我来说仍然太复杂了,无法理解。
我得到了以下6个字符串(每行是一个单独的变量):
$sampleArray[] = "Pyromancer 6,52 Pack - 19,99€";
$sampleArray[] = "Dreadnought Pack - 36,99€";
$sampleArray[] = "Citizen Pack - 45,99€";
$sampleArray[] = "Colonies - Pyromancer Pack - ";
$sampleArray[] = "Colonies - Dreadnought Pack - ";
$sampleArray[] = "Colonies - Citizen Pack - ";
foreach($sampleArray as $package_name) {
$pattern = '/('s-'s[0-9]+,[0-9]+€)|('s-'s)$/';
$package_name = preg_replace($pattern, '', $package_name);
echo $package_name;
}
我想要的结果是去掉末端的部分:
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
有人愿意帮我指出我遗漏的最后一件事吗?
此外,是否可以将其放入一个替换函数中,而不是多次执行?
更新:我在这里做了一把小提琴:http://viper-7.com/1dXwXQ
这将在一个正则表达式中获得所有组合:(从您的fiddle更新)
$pattern = '/('s-'s[0-9]+,[0-9]+€)|('s-'s)$/';
$package_name = preg_replace($pattern, '', $package_name);
echo $package_name;
以下是运行中的正则表达式:http://regex101.com/r/pR6jM9/3
以下是您在评论中提供的fiddle代码:http://viper-7.com/ZpivYn
正则表达式的解释:
get"-"后跟数字,后跟欧元符号或在一行的末尾得到"-"
然后将其替换为无
这是我的尝试:
$pattern = '/'s*-'s*([0-9]+(,[0-9]+)?€)?$/';
$package_name = preg_replace($pattern, '', $package_name);
不确定$package的名称是什么。如果是多行段落,则可以使用preg_replace_all。
这是演示:
http://regexr.com/39sev
它将匹配的东西:
-
- 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);
这比公认的答案要笼统得多。如果你想的话,你可以用regex做同样的事情:
$pattern = '/'s*-[^-]+$/';
$package_name = preg_replace($pattern, '', $package_name);
更简单,处理字符串的每个结尾。。
这应该可以做到:
$pattern = '([0-9]+,[0-9]++€)';
$package_name = preg_replace($pattern, '', $package_name);
$package_name = trim($package_name, "-");
echo $package_name;
使用trim()剪切出最后一个"-"。