2017-02-23 5 views
0

最後に私のコードで最後のエラーが見つかりましたが、今回は非常に混乱しています...コードでわかるように、出力は(Nothing)でなければなりません。しかし、私はまだMitgliedschaft Card (Weltweit)を取得します。正規表現エラー? - 削除しないのですか?

なぜこのフレーズを削除しないのですか? - ケース\bがアクティブな場合にのみ削除されます。

$deletewords = ["Mitgliedschaft Card (Weltweit)", "(Xbox 360/Xbox One/weltweit)", "Origins", "Guthaben Code - nur DE", "Guthaben Code für EA ORIGIN", "PC - nur DE"]; 

$myArra = ["Mitgliedschaft Card (Weltweit)", "Guthaben Code - nur DE", "Guthaben Code für EA ORIGIN", "PC - nur DE"]; 

foreach ($myArra as $string){ 
    $string = mb_eregi_replace('\b' . implode('|', $deletewords) . '\b', '', $string); 
    echo $string; 
} 

他のすべての単語が削除されますが、Mitgliedschaft Card (Weltweit)がまだあることに混乱しています...

+0

あなたが質問を明確にすることができます。私は "私は彼がこの言葉を削除していませんか? 「なぜこのフレーズを削除しないのですか?」という意味です。 –

+0

あなたは正しいです、残念です...そして私はまだこのエラーを受け取ります。 – Jan

+0

')'と文字列の終わりの間に単語境界がないので。 – Toto

答えて

1

)Mitgliedschaft Card (Weltweit)内の文字列の末尾の間には単語の境界がありません。単語境界は、単語文字と非単語文字の間にのみ存在する。

はまた、括弧は正規表現の特殊文字は、あなたがそれらをエスケープする必要があり、ここでpreg_quoteを使用して移動するための方法である:

$deletewords = ["Mitgliedschaft Card (Weltweit)", "(Xbox 360/Xbox One/weltweit)", "Origins", "Guthaben Code - nur DE", "Guthaben Code für EA ORIGIN", "PC - nur DE"]; 

$myArra = ["Mitgliedschaft Card (Weltweit)", "Guthaben Code - nur DE", "Guthaben Code für EA ORIGIN", "PC - nur DE"]; 

function quote($x) { return preg_quote($x);} 
$deletewords = array_map('quote', $deletewords); 
$allwords = implode('|', $deletewords) 
foreach ($myArra as $string) { 
    $string = mb_eregi_replace('(?:' . $allwords . ')', '', $string); 
    echo $string,"\n"; 
} 
+0

ありがとうございます。 preg_quoteはマルチバイトで安全ですか?そうでない場合はマルチバイトの安全にする方法がありますか? – Jan

+0

そして、私は '\ b(?: '。$ allwords。')\ b'引用符に変えるべきですか? - 私はちょうどそれらの単語が私のdeletewordsの配列のようなものであり、単語がある場合ではない場合、それらを削除したいと思うので。 'これはすべてのためのMitgliedschaftカード' – Jan

+0

@ヤン:わからない。しかし、私はそれがそうだと思います。 – Toto

関連する問題