3

一部の正規表現をpreg_match_allでの使用からpreg_replaceでの使用に変換するのに少し問題があります。

基本的に、正規表現のみを使用して、スペース、テキストの先頭、またはハイフンのいずれかが前に付いている大文字と一致させたいと思います。これは問題ではありません、私はこれのためにうまくいく次のものを持っています:

preg_match_all('/(?<= |\A|-)[A-Z]/',$str,$results);
echo '<pre>' . print_r($results,true) . '</pre>';

ここで、私がやりたいのは、preg_replaceを使用して、上記の条件に一致する大文字の文字列のみを返すことです。正規表現をpreg_replaceに直接移植すると、保持したい文字が明らかに置き換えられます。

どんな助けでも大歓迎です:)

また、効率の観点から正規表現がこれに最適なソリューションではないことを十分に認識していますが、それでもpreg_replaceを使用したいと思います。

4

2 に答える 2

2

ド・モルガンの法則によれば

  • A-Z、 と
  • 、、、または[space]_\A-

次に、次の文字を削除します

  • ではない A-Zまたは
  • 、、、またはが前に付いて[space]ない\A-

おそらくこれ(一致を空の文字列に置き換えます)?

/[^A-Z]|(?<! |\A|-)./

こちらのをご覧ください。

于 2012-04-25T20:29:00.783 に答える
1

私はそれがこのようなものになると思います:

$sString = preg_replace('@.*?(?<= |\A|-)([A-Z])([a-z]+)@m',"$1", $sString);
于 2012-04-25T20:09:25.873 に答える