пунктуация ereg_replace preg_replace - PullRequest
0 голосов
/ 06 августа 2011

У меня есть этот фрагмент кода из старой установки OsCommerce

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

Я хотел бы изменить селектор [: punct:], чтобы он исключал - тире.

следующая строкакода

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

, который удаляет ранее найденные символы.как я могу сохранить свои тире?

Спасибо, Марио

РЕДАКТИРОВАТЬ

Я думаю, что получил:

$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 Ответ

1 голос
/ 06 августа 2011

Вам, вероятно, нужно будет сделать свой собственный [characterset] вместо использования [:punct:].

Это выглядит правильно, но вам нужно проверить это.

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

Это заменит все, что не является буквой (a-z), цифрой, пробелом или тире.

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

Редактировать: Старый ответ , что не будет работать , потому что ereg не поддерживает lookaround .

Попробуйте этот негативный взгляд (?!-):

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