-5

PHP では、正規表現を使用して次の式で文字を繰り返した文字列を変更したいと考えています。

 1. Chars different from "r", "l", "e" repeated more than once
    consecutively should be replaced for the same char only one time. 
    Example: 
     - hungryyyyyyyyyy -> hungry.
     - hungryy -> hungry
     - speech -> speech

 2. Chars "r", "l", "e" repeated more than twice replaced for the same
    char twice. 
    Example:
     - greeeeeeat -> greeat

よろしくお願いします
パブロ

4

2 に答える 2

2
preg_replace('/(([rle])\2)\2*|(.)\3+/i', "$1$3", $string);

説明:

  (            # start capture group 1
    ([rle])      # match 'r', 'l', or 'e' and capture in group 2
    \2           # match contents of group 2 ('r', 'l', or 'e') again
  )            # end capture group 1 (contains 'rr', 'll', or 'ee')
  \2*          # match any number of group 2 ('r', 'l', or 'e')
|            # OR (alternation)
  (.)          # match any character and capture in group 3
  \3+          # match one or more of whatever is in group 3

グループ 1 とグループ 3 は交代の反対側にあるため、一致するのはそのうちの 1 つだけです。グループまたは 'r'、'l'、または 'e' に一致する場合、グループ 1 には 'rr'、'll'、または 'ee' が含まれます。他の文字の倍数に一致する場合、グループ 3 にはその文字が含まれます。

于 2013-05-10T20:10:08.977 に答える
0

ウェルプ、これが私の見解です:

$content = preg_replace_callback(
  '~([^rle])(?:\1+)|([rle])(?:\2{2,})~i',
  function($m){return($m[1]!='')?$m[1]:$m[2].$m[2];},
  $content);
于 2013-05-10T20:47:17.133 に答える