2011-08-05 16 views
0

は、私が変更したい句読点ereg_replaceのにpreg_replace

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true' 
        ? "([^[:alnum:]])+" 
        : "([[:punct:]])+"; 

インストール古いosCommerceのからこのコードのスニペットを持っています。コードの

次の行は、以前に見つかった文字を削除

$anchor = ereg_replace($pattern, '', strtolower($string)); 

あります。どうすればダッシュを維持できますか?

おかげで、マリオ

EDIT

は、私は私がそれを得たと思う:

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true' 
        ? "([^[:alnum:]])+" 
        : "([^-a-zA-Z0-9[:space:]])+"; 

注:ダッシュが最初に来る必要があります。または、アンダースコアのために:

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true' 
        ? "([^[:alnum:]])+" 
        : "([^a-zA-Z0-9_[:space:]])+"; 

私は負の先読みを使用する方法を見つけ出すませんでした:( 乾杯マリオ

答えて

1

はおそらく代わりに[:punct:]を使用しての独自の[characterset]を作成する必要があります

。。。

この1つは右約見えますが、あなたはそれを確認する必要があります。

[^a-zA-Z0-9-\s] 

これはnは何を交換しますo(a-z)文字、数字、空白、またはダッシュ。

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true' 
      ? "([^[:alnum:]])+" 
      : "[^a-zA-Z0-9-\s]+"; 

編集:古い答えereg doesn't support lookaroundために動作しないこと。

この否定先読み(?!-)試してみてください。

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true' 
       ? "([^[:alnum:]])+" 
       : "((?!-)[[:punct:]])+";