次の文字列があるとします。
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_OFFSET_CAPTURE
フラグを使用します。preg_match
$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
?>
これは(多かれ少なかれ)1行のソリューションです。
$pos = strcspn($string, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ');
strcspnは、2 番目の引数で任意の文字が最初に出現する位置を返します。文字が出現しない場合は、文字列の長さを返します。
str2 の文字を含まない str1 の最初のセグメントの長さを返します。
$pos = strcspn($string, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ');
if ($pos < strlen($string)) {
echo "capital letter as index $pos";
}
az 文字のソリューション。おそらくユニコードは機能しません
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';
}