PHP中的正则表达式和preg_替换
我正在使用PHP中的正则表达式和preg_替换,php,regex,preg-replace,Php,Regex,Preg Replace,我正在使用preg\u replace(),我需要一些帮助。我已经尝试这么做了一段时间了,现在是时候面对事实了:我对正则表达式非常不熟悉。我甚至不确定用它们能做什么,不能做什么 假设我想将字符串dogs更改为cats,无论它们之间有多少空格。我该怎么做 dogs -> cats d o g s -> c a t s 我试过: preg_replace("/D\s*O\s*+G/", "cat", $string); 字符串返回时所有的“dog”都保持不变 下一个问题:是否可以忽略
preg\u replace()
,我需要一些帮助。我已经尝试这么做了一段时间了,现在是时候面对事实了:我对正则表达式非常不熟悉。我甚至不确定用它们能做什么,不能做什么
假设我想将字符串dogs
更改为cats
,无论它们之间有多少空格。我该怎么做
dogs -> cats
d o g s -> c a t s
我试过:
preg_replace("/D\s*O\s*+G/", "cat", $string);
字符串返回时所有的“dog”都保持不变
下一个问题:是否可以忽略字母之间的字符而不仅仅是空白
d.o g.s -> c.a t.s
dkgoijgkjhfkjhs -> ckgaijtkjhfkjhs
最后,当涉及到整个单词时,我似乎也无法让函数发挥作用
display: none -> somestring
display : none -> somestring
通常情况下,我只是让$string
返回空值
提前感谢。正则表达式区分大小写 你必须使用
preg_replace("/[Dd]\s*[Oo]\s*+[Gg]/", "cat", $string);
或者使用不区分大小写修改器
preg_replace("/D\s*O\s*+G/i", "cat", $string);
如果要与空格以外的字符匹配,只需将\s引用更改为与允许的字符匹配的内容,例如:
preg_replace("/D\W*O\W*+G/i", "cat", $string);
一个问题是,您不允许它将
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);
尝试此操作以忽略所有字符:
$res = preg_replace('~d([^do]*+)o([^g]*+)g([^s]*+)s~i' , 'c$1a$2t$3s', $string);
你到底想在这里实现什么?区分大小写(在最后的“/”后面添加一个“i”标志以使其不敏感)。然而,通常更有效的方法是将字符串的大小写作为检查对象,而不是同时检查两者(除非有必要)。除了更好地掌握正则表达式之外,我只想更好地控制我网站上的帖子,这样就不会有人写文章,从而有效地避免审查。这里的帖子非常有用。