gpt4 book ai didi

php - preg_replace 匹配字符之间的字符串但排除一些字符 PHP

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:38 24 4
gpt4 key购买 nike

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

$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_match 以便最终列表看起来像这样

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");

为了提供上下文,这些是漫画标题,我想删除变体封面,但每隔一段时间,出版商就会偷偷输入 REG CVR,我需要保留这个。

这些模式保持不变。

  • 漫画标题始终全部大写并位于字符串的开头,但它们将包含字母和数字的组合。
  • 发行编号跟在漫画标题之后并以“#”符号 COMIC TITLE #000 开头
  • 最后一组字符将是价格,并且始终使用“$”作为价格的开头。
  • 出现在“()”中的项目并不总是存在(这些可以删除,如果它使事情变得更容易,它们不是必需的)
  • 变体封面的名称会有所不同,可以包含数字和字母的组合,但字母 CVR 始终跟在变体封面的名称后面。

我认为问题编号的最后一位数字和 $ 符号可能是分隔符,我只是不确定如何构建匹配模式来执行此操作并排除 REG CVR 案例。

应该提到这是用 PHP 完成的。

谢谢凯文

最佳答案

这就像一个魅力 :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>";
}
?>

只是评论:

如果你有:

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

输出仍然只有 2 个结果。如果你想在这种情况下获得 5 个结果,你需要将正则表达式更改为这个:

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

关于php - preg_replace 匹配字符之间的字符串但排除一些字符 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19121718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com