簡體   English   中英

查找字符串中第一個大寫字符的最快方法

[英]Fastest way to find first uppercase character in a string

假設你有這個字符串:

hiThere

查找第一個大寫字符的最快方法是什么? (本例中為T

我擔心表現,因為有些詞很長。

最簡單的方法是使用preg_match(如果只有1個匹配)或preg_match_all(如果你想要所有的匹配) http://php.net/manual/en/function.preg-match.php

preg_match_all('/[A-Z]/', $str, $matches, PREG_OFFSET_CAPTURE);

不確定它是否是最快的..

為了找到第一個大寫字符,我將使用preg_matchPREG_OFFSET_CAPTURE標志:

$string = "hiThere";

preg_match( '/[A-Z]/', $string, $matches, PREG_OFFSET_CAPTURE );

print_r( $matches[0] );

返回以下內容:

Array ( [0] => T [1] => 2 )

您可以將此邏輯包裝到函數中並反復使用它:

function firstUC ( $subject ) {
  $n = preg_match( '/[A-Z]/', $subject, $matches, PREG_OFFSET_CAPTURE );
  return $n ? $matches[0] : false;
}

echo ( $res = firstUC( "upperCase" ) ) ? $res[1] : "Not found" ;
// Returns: 5

echo ( $res = firstUC( "nouppers!" ) ) ? $res[1] : "Not found" ;
// Returns: Not found

其他做法

$stringCamelCase = 'stringCamelCase';// hiThere

與preg_split()的方式:

$array      = preg_split('#([A-Z][^A-Z]*)#', $stringCamelCase, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
echo strlen($array[0]);// $array = ['string', 'Camel', 'Case']

用strpbrk()方式:

$CamelCase = strpbrk($stringCamelCase, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
echo strpos($stringCamelCase, $CamelCase);

我想這樣做:

strlen(preg_replace("/^([a-z]*)[A-Z].*$/", "$1", $str));

isThis => 2
largerWord => 6

使用strpos()

echo strpos($string, "T");

有這個功能最難的時候,直到我發現陣列是多維的。 沒有看到任何人的代碼提到這一點。 要獲得我使用的第一封大寫字母的位置:

<?php

$field = "i_select_Interior_Quote";
preg_match( '/[A-Z]/', $field, $m, PREG_OFFSET_CAPTURE );

$posi=$m[0][1];

echo '<br><br>'.$posi; // outputs 9

?>

az字符的解決方案。 可能不會工作unicode

 preg_match('/[A-Z]/', $str, $m);
 if(isset($m[1])) {
    echo 'First upper char is '.$m[1].' and located at '. strpos($string, "T");
 }
 else {
    'There is no upperchar';
 }

這是(或多或少)一線解決方案。

$pos = strcspn($string, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ');

strcspn將返回第二個參數中任何字符第一次出現的位置,如果沒有字符,則返回字符串的長度。

返回str1的初始段的長度,該段不包含str2中的任何字符。

$pos = strcspn($string, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ');
if ($pos < strlen($string)) {
    echo "capital letter as index $pos";
}

我在自己的應用程序中使用了什么:

function acronyms($s){
  $s=str_replace(array('& ','of ','the ','and '),'',strtolower($s));
  $s=ucwords(trim($s)); //Collecting data
  if(strlen($s)>0 && preg_match_all('/[A-Z]/',$s,$m))   return implode('',$m[0]);
return $s;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM