这是我在这里的第一篇文章。我已经开始写一些,并总是设法自己解决。唉,正则表达式让我想在街上摔脸,我被卡住了。
我正在尝试编写一个正则表达式,它将检查字符串中是否有任何不是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,因为没有什么需要替换。
答案 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)