簡體   English   中英

PHP中的正則表達式和preg_replace

[英]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返回空。

提前致謝。

一個問題是您不允許它將dD識別為同一事物。 為此,只需將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM