Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 preg_替换匹配字符之间的字符串,但排除一些字符_Php_String_Preg Match - Fatal编程技术网

Php preg_替换匹配字符之间的字符串,但排除一些字符

Php preg_替换匹配字符之间的字符串,但排除一些字符,php,string,preg-match,Php,String,Preg Match,我仍然在与preg_比赛模式作斗争。我将以下字符串集存储在一个数组中 $comics = array("ABSOLUTION RUBICON #4 (MR) $3.99","ABSOLUTION RUBICON #4 FINAL JUSTICE CVR (MR) $3.99","ABSOLUTION RUBICON #4 HAPPY KITTY PREMIUM CVR (MR) $9.99", "ABSOLUTION RUBICON #4 WRAP CVR (MR) $3.99","SONIC

我仍然在与preg_比赛模式作斗争。我将以下字符串集存储在一个数组中

$comics = array("ABSOLUTION RUBICON #4 (MR) $3.99","ABSOLUTION RUBICON #4 FINAL JUSTICE CVR (MR) $3.99","ABSOLUTION RUBICON #4 HAPPY KITTY PREMIUM CVR (MR) $9.99", "ABSOLUTION RUBICON #4 WRAP CVR (MR) $3.99","SONIC THE HEDGEHOG #253 REG CVR $2.99");

ABSOLUTION RUBICON #4 (MR) $3.99 
ABSOLUTION RUBICON #4 FINAL JUSTICE CVR (MR) $3.99 
ABSOLUTION RUBICON #4 HAPPY KITTY PREMIUM CVR (MR) $9.99 
ABSOLUTION RUBICON #4 WRAP CVR (MR) $3.99
SONIC THE HEDGEHOG #253 REG CVR $2.99
我想做一个preg_匹配,以便最终列表如下所示

ABSOLUTION RUBICON #4 (MR) $3.99 
SONIC THE HEDGEHOG #253 REG CVR $2.99

cleanComics = array("ABSOLUTION RUBICON #4 (MR) $3.99","SONIC THE HEDGEHOG #253 REG CVR $2.99");
为了给它的上下文,这些都是漫画标题,我想消除变型封面,但每隔一段时间,出版商会滑入一个注册CVR,我需要保留这一个

这些模式保持不变

  • 漫画标题总是在所有大写字母中,并且位于字符串的开头,但它们将包含字母和数字的混合体
  • 发行编号紧跟漫画标题,并以“#”符号漫画标题#000开头
  • 最后一组字符将是价格,它将始终使用“$”作为价格的开头
  • “()”中出现的项目并不总是存在的(可以删除这些项目,如果这样做使事情更简单,则它们不是必需的)
  • 变体封面的名称会有所不同,可能包含数字和字母的混合,但字母CVR始终跟随变体封面的名称
我认为发行号的最后一位数字和$符号可能是分隔符,我只是不知道如何构造匹配模式来做到这一点,并排除REG CVR案例

应该提到这是在PHP中完成的

谢谢
Kevin

您可以使用preg_替换:

$result = preg_replace('~#[0-9]++ \K.*?CVR~', '', $comics);

这就像一个符咒:D

    <?
$comics = array("ABSOLUTION RUBICON #4 (MR) $3.99",
                "ABSOLUTION RUBICON #4 FINAL JUSTICE CVR (MR) $3.99",
                "ABSOLUTION RUBICON #4 HAPPY KITTY PREMIUM CVR (MR) $9.99", 
                "ABSOLUTION RUBICON #4 WRAP CVR (MR) $3.99",
                "SONIC THE HEDGEHOG #253 REG CVR $2.99");

$added = Array();
$output = Array();
foreach ($comics as $title){
    $temp = preg_replace("/ #([0-9])* ([\\\(]|[\\\)]|[a-z]|[ ]|[A-Z])* \\\$*([0-9])*.([0-9])*/", "", $title);
    if (!in_array($temp, $added)){
        $added[count($added)] = $temp;
        $output[count($output)] = $title;
    }
}
foreach ($output as $data){
    echo "$data<br>";
}
?>
输出仍然只有两个结果。如果您希望在这种情况下得到5个结果,则需要将正则表达式更改为:

$temp = preg_replace("/([\\\(]|[\\\)]|[a-z]|[ ]|[A-Z])* \\\$*([0-9])*.([0-9])*/", "", $title);

你已经试过什么reg exp了?@A.O.还没有,我是reg表达式的新手,甚至在开始时都有困难。如果你想让别人帮你做这项工作,也许你应该更清楚地解释一下你想要什么。我就是想不出你想要保留什么,我正在为你准备一些东西。。。我必须在正则表达式中修正一些愚蠢的东西,并且将完成。他将获得4个绝对Rubiconlook,这是一个很好的起点,我应该提到我需要保留发行编号和价格,对不起。让我来玩玩好的,很好用谢谢。我真的需要学习更多的正则表达式,当我遇到正则表达式时,我的项目总是会停下来。上周我学会了如何使用它们,因为我需要一个复杂的正则表达式。。。当你了解它们的工作原理时,这并不是那么困难。谢谢,我明白了,幸运的是,该列表仅限于该周的发货量,所以不应该有一个问题编号的组合,但我会记下它。
$temp = preg_replace("/([\\\(]|[\\\)]|[a-z]|[ ]|[A-Z])* \\\$*([0-9])*.([0-9])*/", "", $title);