Örnek bir dize: "Some text.....!!!!!!!!?????"
Nasıl bu örnekte harf t
olan son harfi (hatta alphanum karakteri) konumunu almak istiyorsunuz PHP kullanarak?
Sen preg_match_all
with the regular expression \p{L}
tüm Unicode harf . With the additional flag PREG_OFFSET_CAPTURE da uzaklıklar almak bulmak için kullanabilirsiniz:
$str = "Some text.....!!!!!!!!?????";
if (preg_match_all('/\p{L}/u', $str, $matches, PREG_OFFSET_CAPTURE) > 0) {
$lastMatch = $matches[0][count($matches[0])-1];
echo 'last letter: '.$lastMatch[0].' at '.$lastMatch[1];
} else {
echo 'no letters found';
}
$s = "Some text.....!!!!!!!!embedded?????";
$words = str_word_count($s,2);
$lastLetterPos = array_pop(array_keys($words)) + strlen(array_pop($words)) - 1;
echo $lastLetterPos;
Bunun yerine sadece alfa daha alphanum için izin vermek istiyorsanız:
$s = "Some text.....!!!!!!!!embedded21?????";
$words = str_word_count($s,2,'0123456789');
$lastLetterPos = array_pop(array_keys($words)) + strlen(array_pop($words)) - 1;
echo $lastLetterPos;
Geçerli gibi diğer karakterler eklemek için:
$s = "Some text.....!!!!!!!!embedded!!à?????";
$words = str_word_count($s,2,'0123456789ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ');
$lastLetterPos = array_pop(array_keys($words)) + strlen(array_pop($words)) - 1;
echo $lastLetterPos;
Bu, tüm düşünün ne bir mektup bağlıdır, ve "Some!!!???text???!!!"
, örneğin ile ne yapmak istediğinizi:
Naif çözüm tutmak istediğiniz ilk karakteri bulmak için dizesindeki son konumdan yineleme olacaktır, o zaman dönün. (Ya da daha önce birini dönmek, sonra durdurmak istediğiniz ilk karakteri bulmak için baştan yineleme.)
Yoksa tutmak istediğinizi maç için bir regex kullanabilirsiniz, daha sonra son maçı alır. (Ya son karakterini, daha sonra, saklamak istemiyorum ne kaldırmak için bir regex yerine kullanabilirsiniz.)
İşte basit ve düz ileri O (n) algoritması.
Için manuel ctype_alpha()
:
In the standard C locale letters are just [A-Za-z]
Farklı bir yerel gerekiyorsa, bir karakter alfa olup olmadığını belirleyen fonksiyon soyut gerekir. Bu şekilde bu algoritma tutmak ve değişen dillere adapte edebilirsiniz.
function lastAlphaPosition($string) {
$lastIndex = strlen($string)-1;
for ($i = $lastIndex; $i > 0; --$i) {
if (ctype_alpha($string[$i])) {
return $i;
}
}
return -1;
}
$testString = 'Some text.....!!!!!!!!?????';
$lastAlphaPos = lastAlphaPosition($testString);
if ($lastAlphaPos !== -1) {
echo $testString[$lastAlphaPos];
} else {
echo 'No alpha characters found.';
}