0

我有来自旧 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:]])+";

我不知道如何使用负前瞻:(。干杯。马里奥

4

1 回答 1

1

您可能需要自己制作[characterset]而不是使用[:punct:].

这个看起来是对的,但你需要验证它。

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

这将替换任何不是 (az) 字母、数字、空格或破折号的内容。

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

编辑:旧答案,因为ereg 不支持环视而行不通

试试这个消极的前瞻(?!-)

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
                ?   "([^[:alnum:]])+"
                :   "((?!-)[[:punct:]])+";
于 2011-08-05T22:34:36.407 回答