正则表达式查找除x,a,n, - 之外的所有字符

时间:2013-01-09 20:12:04

标签: php regex

这是我在这里的第一篇文章。我已经开始写一些,并总是设法自己解决。唉,正则表达式让我想在街上摔脸,我被卡住了。

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

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

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

例如,如果我传入xan-nax-jxy,我想回到xan-nax-xxx,因为用x代替j和y。如果我传入xxx-aaa-nnn,它应该返回xxx-aaa-nnn,因为没有什么需要替换。

3 个答案:

答案 0 :(得分:2)

使用^$锚点,您只会匹配由不是x,a,n或 - 的完全字符组成的字符串。由于你想分别匹配每个字符并用'x'替换每个字符,只需删除锚点和重复:

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

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

答案 1 :(得分:1)

您的preg_replace只会匹配一个完全由[^xan\-]组成的字符串,因为^与该行的开头相匹配,而$与该行的结尾相匹配这条线。如果您需要替换字符串中的几个字符组,我建议使用

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

并多次运行,直到字符串不再发生变化。

注意preg_replace的行为在编程语言之间有所不同。在您的语言中,它也可以替换所有出现的内容(例如,在PHP中)。

也许有更好的方法可以做到这一点,但我现在无法想到一些事情:)

答案 2 :(得分:0)

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