1

を使用preg_replace()していますが、助けが必要です。私はしばらくこれをやろうとしてきましたが、事実に直面する時が来ました: 私は正規表現が本当に苦手です。それらで何ができて何ができないのかさえわかりません。

文字列の間にどれだけの空白があっても、文字列dogsを変更したいとしましょう。catsどうすればいいのですか?

dogs -> cats
d o g s -> c a t s

私が試してみました:

preg_replace("/D\s*O\s*+G/", "cat", $string);

文字列は、すべての "do g" が変更されずに返されます。

次の質問: 空白だけでなく、文字間の文字を無視することは可能ですか?

d.o g.s -> c.a t.s
dkgoijgkjhfkjhs -> ckgaijtkjhfkjhs

そして最後に、単語全体に関して言えば、関数を機能させることができないようです。

display: none -> somestring
display    :    none -> somestring

多くの場合$string、空に戻すだけです。

前もって感謝します。

4

3 に答える 3

3

d1 つの問題は、とDを同じものとして認識できないことです。これを行うにはi、last の後に/修飾子を付けます。

\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);
于 2013-06-17T03:09:09.927 に答える
0

正規表現では大文字と小文字が区別されます

使用する必要があります

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);
于 2013-06-17T03:06:51.550 に答える
0

すべての文字を無視するには、これを試してください:

$res = preg_replace('~d([^do]*+)o([^g]*+)g([^s]*+)s~i' , 'c$1a$2t$3s', $string);
于 2013-06-17T03:11:55.997 に答える