我正在使用preg_replace()
,我需要一些帮助。我一直试图这样做一段时间,现在是时候面对事实:我对正则表达式真的很糟糕。我甚至不确定他们能做什么,不能做什么。
假设我想将字符串dogs
更改为cats
,无论它们之间有多少空格。我该怎么做?
dogs -> cats
d o g s -> c a t s
我试过了:
preg_replace("/D\s*O\s*+G/", "cat", $string);
并且字符串返回时所有“d o g”保持不变。
下一个问题:是否可以忽略字母之间的字符而不仅仅是空格?
d.o g.s -> c.a t.s
dkgoijgkjhfkjhs -> ckgaijtkjhfkjhs
最后,当涉及到整个单词时,我似乎永远无法使该功能发挥作用。
display: none -> somestring
display : none -> somestring
我经常会让$string
返回空。
提前致谢。
答案 0 :(得分:2)
一个问题是,您不允许它将d
和D
识别为同一件事。要做到这一点,只需将i
放在最后/
之后作为修饰符。
您的\s
可以是您想要允许的任何内容 - 在这种情况下,您可能希望.
允许所有字符(换行符除外,但添加了s
修饰符除外)。
所以尝试这样的事情:
$string = preg_replace("/d(.*?)o(.*?)g/i","c$1a$2t",$string);
请注意,这意味着DOG
变为cat
。如果你想保留案件,试试这个:
$string = preg_replace_callback("/(d)(.*?)(o)(.*?)(g)/i",function($m) {
return
($m[1] == "d" ? "c" : "C")
.$m[2]
.($m[3] == "o" ? "a" : "A")
.$m[4]
.($m[5] == "g" ? "t" : "T");
},$string);
答案 1 :(得分:0)
正则表达式区分大小写
你必须使用
preg_replace("/[Dd]\s*[Oo]\s*+[Gg]/", "cat", $string);
或使用case insensitve修饰符
preg_replace("/D\s*O\s*+G/i", "cat", $string);
如果你想与其他字符匹配,那么你需要将你的引用更改为与允许的字符匹配的内容,例如:
preg_replace("/D\W*O\W*+G/i", "cat", $string);
答案 2 :(得分:0)
请尝试忽略所有字符:
$res = preg_replace('~d([^do]*+)o([^g]*+)g([^s]*+)s~i' , 'c$1a$2t$3s', $string);