112 $word_len = mb_strlen($word);
124 $word = preg_replace(
'/^Y/',
'y', $word);
125 $word = preg_replace(
'/([' . $vowels .
'])(Y)/',
"\\1y", $word);
129 while (($R1 < $word_len) && (mb_strpos($vowels, mb_substr($word, $R1, 1)) ===
false))
133 while (($R1 < $word_len) && (mb_strpos($vowels, mb_substr($word, $R1, 1)) !==
false))
141 if (preg_match(
'/^COMMUN/', $word))
145 if (preg_match(
'/^GENER/', $word))
151 while (($R2 < $word_len) && (mb_strpos($vowels, mb_substr($word, $R2, 1)) ===
false))
155 while (($R2 < $word_len) && (mb_strpos($vowels, mb_substr($word, $R2, 1)) !==
false))
167 if (preg_match(
'/(SSES|IED|IES|US|SS|S)$/', $word, $found))
173 $word = mb_substr($word, 0, $word_len - 4) .
'SS';
178 if (mb_strlen($word) > 4)
180 $word = mb_substr($word, 0, $word_len - 3) .
'I';
184 $word = mb_substr($word, 0, $word_len - 3) .
'IE';
190 if (preg_match(
'/([' . $vowels .
'].*.)(S)$/', $word))
192 $word = mb_substr($word, 0, $word_len - 1);
207 if (preg_match(
'/(EEDLY|INGLY|EDLY|EED|ING|ED)$/', $word, $found))
213 if (preg_match(
'/' . $found[0] .
'$/', mb_substr($word, $R1)))
215 $word = mb_substr($word, 0, mb_strlen($word) - mb_strlen($found[0])) .
'EE';
220 if (($step1b = preg_replace(
'/([' . $vowels .
'].*)(ED|EDLY|ING|INGLY)$/',
"\\1", $word)) != $word)
223 if (($step1b1 = preg_replace(
'/(AT|BL|IZ)$/',
"\\1E", $step1b)) == $step1b)
226 if (preg_match(
'/(BB|DD|FF|GG|MM|NN|PP|RR|TT)$/', $step1b))
228 $step1b1 = mb_substr($step1b, 0, mb_strlen($step1b) - 1);
236 if (preg_match(
'/^[^' . $vowels .
']+[' . $vowels .
'][^WXy' . $vowels .
']$/', $step1b)
237 || preg_match(
'/^[' . $vowels .
'][^' . $vowels .
']$/', $step1b)
240 $step1b1 = $step1b .
'E';
252 $word = preg_replace(
'/^(.+[^' . $vowels .
'])([yY])$/',
"\\1I", $word);
258 && preg_match(
'/' . $found[0] .
'$/', mb_substr($word, $R1))
264 if (preg_match(
'/LOGI$/', $word))
266 $word = mb_substr($word, 0, mb_strlen($word) - 3) .
'OG';
270 if (preg_match(
'/[CDEGHKMNRT]LI$/', $word))
272 $word = mb_substr($word, 0, mb_strlen($word) - 2);
276 $word = mb_substr($word, 0, mb_strlen($word) - mb_strlen($found[0])) .
$STEMMING_EN_STEP2A[$found[0]];
284 && preg_match(
'/' . $found[0] .
'$/', mb_substr($word, $R1))
290 if (preg_match(
'/ATIVE$/', mb_substr($word, $R2)))
292 $word = mb_substr($word, 0, mb_strlen($word) - 5);
296 $word = mb_substr($word, 0, mb_strlen($word) - mb_strlen($found[0])) .
$STEMMING_EN_STEP3A[$found[0]];
304 && preg_match(
'/' . $found[0] .
'$/', mb_substr($word, $R2))
310 if (preg_match(
'/[ST]ION$/', $word))
312 $word = mb_substr($word, 0, mb_strlen($word) - mb_strlen($found[0]));
316 $word = mb_substr($word, 0, mb_strlen($word) - mb_strlen($found[0]));
322 preg_match(
'/E$/', mb_substr($word, $R2))
324 preg_match(
'/E$/', mb_substr($word, $R1))
328 preg_match(
'/[^' . $vowels .
'][' . $vowels .
'][^WXy' . $vowels .
'].$/', $word)
329 || preg_match(
'/^[' . $vowels .
'][^' . $vowels .
'].$/', $word)
334 $word = mb_substr($word, 0, mb_strlen($word) - 1);
336 elseif (preg_match(
'/L$/', mb_substr($word, $R2)) && preg_match(
'/LL$/', $word))
338 $word = mb_substr($word, 0, mb_strlen($word) - 1);
341 return str_replace(
'y',
'Y', $word);
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)