2

这是我在此的头一篇博文。我已经开始写一些,并且总是设法自己弄清楚。唉,正则表达式让我想在街上打我的脸,我被困住了。

我正在尝试编写一个正则表达式,它将检查字符串中是否有任何不是 x、a、n 或 - 的字符。这是我所拥有的:

    preg_replace( '/^[^xan\-]+$/' , 'x' , $this->str_key_mask )

我确信这很简单,但我尝试添加、更改和删除元字符,但无法获得我想要的结果。

例如,如果我传入 xan-nax-jxy,我想取回 xan-nax-xxx,因为将 j 和 y 替换为 x。如果我传入 xxx-aaa-nnn,它应该返回 xxx-aaa-nnn,因为不需要替换。

4

3 回答 3

2

使用^and锚点,您将只匹配完全由非 x、a、n 或 - 字符$组成的字符串。由于您想分别匹配每个字符并用“x”替换每个字符,因此只需删除锚点和重复项:

preg_replace( '/[^xan\-]/' , 'x' , $this->str_key_mask )

如果您希望像“jy”这样的字符串变为“xx”,则必须删除重复项。相反,如果您希望 'jy' 变为 'x',请保留+您的字符类之后,以便将连续的字符一起替换。

于 2013-01-09T20:15:30.390 回答
1

preg_replace将只匹配一个完全由 组成的字符串[^xan\-],因为^它与行首匹配,并且$与行尾匹配。如果您需要替换字符串中出现的几次字符组,我建议使用

preg_replace('/[^xan-]/', 'x', $this->str_key_mask)

并运行几次,直到字符串不再改变。

注意:编程语言之间的行为preg_replace不同。在您的语言中,它也可以替换所有出现的地方(例如,在 PHP 中就是这样)。

也许有更好的方法可以做到这一点,但我现在想不出什么:)

于 2013-01-09T20:15:58.220 回答
0
preg_replace( '/[^xan-]/' , 'x' , $this->str_key_mask)
于 2013-01-09T20:16:30.377 回答