2

これは私の最初の投稿です。私はいくつか書き始めましたが、常に自分でそれを理解することができました. 悲しいかな、正規表現を使うと路上で顔をしかめたくなり、立ち往生してしまいます。

x、a、n、または - 以外の文字の文字列をチェックする正規表現を作成しようとしています。ここに私が持っているものがあります:

    preg_replace( '/^[^xan\-]+$/' , 'x' , $this->str_key_mask )

単純なことだと思いますが、メタキャラクターの追加、変更、削除を試みましたが、必要な結果が得られません。

たとえば、xan-nax-jxy を渡すと、j と y を x に置き換えて xan-nax-xxx を取得したいとします。xxx-aaa-nnn を渡すと、何も置き換える必要がないため、xxx-aaa-nnn が返されます。

4

3 に答える 3

2

^およびアンカーを使用すると、x、a、n、または - 以外の文字だけで構成される$文字列のみに一致します。これらの各文字を個別に照合し、それぞれを「x」に置き換えたいので、アンカーと繰り返しを削除するだけです:

preg_replace( '/[^xan\-]/' , 'x' , $this->str_key_mask )

「jy」のような文字列を「xx」にしたい場合は、繰り返しを削除する必要があります。代わりに 'jy' を 'x' にしたい場合は+、文字クラスの後に を保持して、連続する文字が一緒に置き換えられるようにします。

于 2013-01-09T20:15:30.390 に答える
1

は、行頭と一致し、行末と一致するため、preg_replace完全に で構成される文字列にのみ一致します。文字列内のいくつかの文字グループを置き換える必要がある場合は、使用することをお勧めします[^xan\-]^$

preg_replace('/[^xan-]/', 'x', $this->str_key_mask)

文字列が変更されなくなるまで、これを数回実行します。

: の動作はpreg_replaceプログラミング言語によって異なります。あなたの言語では、すべてのオカレンスを置き換えることもできます (たとえば、PHP のように)。

これを行うためのより良い方法があるかもしれませんが、今は何か思いつきません:)

于 2013-01-09T20:15:58.220 に答える
0
preg_replace( '/[^xan-]/' , 'x' , $this->str_key_mask)
于 2013-01-09T20:16:30.377 に答える