[英]Regular expressions and preg_replace in PHP
我正在使用preg_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
返回空。
提前致謝。
一個問題是您不允許它將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);
正則表達式區分大小寫
您將不得不使用
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);
試試這個忽略所有字符:
$res = preg_replace('~d([^do]*+)o([^g]*+)g([^s]*+)s~i' , 'c$1a$2t$3s', $string);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.