考慮到這一輸入字符串:如何獲得最後一個字的索引以大寫字母在PHP
「這是一個測試字符串獲取單詞的最後一個索引在PHP中的大寫字母」
我怎樣才能得到最後的大寫字母的位置(在這個例子中,第一個「P」(不是最後一個「PHP」字的「P」)?
考慮到這一輸入字符串:如何獲得最後一個字的索引以大寫字母在PHP
「這是一個測試字符串獲取單詞的最後一個索引在PHP中的大寫字母」
我怎樣才能得到最後的大寫字母的位置(在這個例子中,第一個「P」(不是最後一個「PHP」字的「P」)?
的位置,我認爲這正則表達式請試試看。
https://regex101.com/r/KkJeho/1
$pattern = "/.*\s([A-Z])/";
//$pattern = "/.*\s([A-Z])[A-Z]+/"; pattern to match only all caps word
編輯解決什麼Wiktor的評論中寫道:我想你可以str_replace函數所有新線與空間的正則表達式輸入字符串。
這應該使正則表達式將其視爲單行正則表達式,並仍然給出正確的輸出。
雖然未經測試。
要查找信/字的位置:
$str = "this is a Test String to get the last index of word with an uppercase letter in PHP";
$pattern = "/.*\s([A-Z])(\w+)/";
//$pattern = "/.*\s([A-Z])([A-Z]+)/"; pattern to match only all caps word
preg_match($pattern, $str, $match);
$letter = $match[1];
$word = $match[1] . $match[2];
$position = strrpos($str, $match[1].$match[2]);
echo "Letter to find: " . $letter . "\nWord to find: " . $word . "\nPosition of letter: " . $position;
如果您還需要考慮一個非正則表達式的版本:您可以嘗試在空白字符分割字符串,迭代返回結果字符串數組,並檢查當前字符串的第一個字符是否爲大寫字符,如下所示(您可能想要添加索引/空值檢查):
<?php
$str = "this is a Test String to get the last index of word with an uppercase letter in PHP";
$explodeStr = explode(" ",$str);
$i = count($explodeStr) - 1;
$characterCount=0;
while($i >= 0) {
$firstChar = $explodeStr[$i][0];
if($firstChar == strtoupper($firstChar)){
echo $explodeStr[$i]. ' at index: ';
$idx = strlen($str)-strlen($explodeStr[$i] -$characterCount);
echo $idx;
break;
}
$characterCount += strlen($explodeStr[i]) +1; //+1 for whitespace
$i--;
}
這將打印80
這確實是PHP
(包括空格)中第一個P
的索引。
安地列斯的格局看起來非常穩固,但這會發現位置更快...
.* \K[A-Z]{2,}
下面是PHP實現:Demo
如果你想看到一個精簡的非正則表達式方法,這將會工作:
代碼:Demo
$str='this is a Test String to get the last index of word with an uppercase letter in PHP test';
$allcaps=array_filter(explode(' ',$str),'ctype_upper');
echo "Position = ",strrpos($str,end($allcaps));
輸出:
Position = 80
這假定有輸入字符串的全部大寫的單詞。如果有可能沒有全部大寫的單詞,那麼一個條件將會把它整理出來。
編輯,重新閱讀的問題後,我不確定是什麼讓PHP
目標串 - 無論它是因爲它是全部大寫,或者只是最後一個字開始一個大寫字母。
如果只是最後一個字開頭的大寫字母那麼這種格局將做到:/.* \K[A-Z]/
如果字必須全部大寫,則有可能是/b
單詞邊界可能是必要的。
一些更多的樣本和說明從OP將是有益的。
另一個編輯,你可以聲明一組字符來排除和使用兩個字符串函數。我使用a-z
和rtrim()
,然後找到最右側的空間,並將1
添加到它。
$str='this is a Test String to get the last index of word with an uppercase letter in PHP test';
echo strrpos(rtrim($str,'abcdefghijklmnopqrstuvwxyz '),' ')+1;
// 80
你說「我可以得到最後一個大寫字母的位置」,在括號中提到了不是最後一個大寫字母的「PHP」字的第一個「P」。那麼你真的需要什麼?此外,你有沒有嘗試過分享? –
這似乎工作https://regex101.com/r/KkJeho/1 – Andreas
等等..你是什麼意思的位置?就像你從strpos中得到的字符數?你爲什麼要標記這個正則表達式?正則表達式不會給你一個計數 – Andreas