3

私はまだ 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で行われることに言及する必要があります。

ありがとうケビン

4

2 に答える 2

1

これは魅力のように機能します: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);
于 2013-10-01T17:40:01.467 に答える
-1

preg_replace を使用できます。

$result = preg_replace('~#[0-9]++ \K.*?CVR~', '', $comics);
于 2013-10-01T17:39:01.227 に答える