文字列から取り出した個々の文字が文字のリストのいずれかと一致するかどうかを確認する方法を知りたいのですが、繰り返しを通じてこれを実行できることはわかっていますが、そうしないことを好みます。私も見つけられるようにする必要があります
私は現在これをやろうとしていますpreg_match()
が、現在のコードに必要な結果が得られないようです:
const CHAR_LIST = '[abcdefghij+-/*&^]';
$start = //an arbitrary index that is after a character in the list
while(!(preg_match($this::CHAR_LIST, $expression[$start]) === 1))
{
$start--;
}
//after loop $start should be indexed to the character in the list
注:開始した任意のインデックスに最も近い先行特殊文字と最も近い先行特殊文字を見つける必要があります。
更新 strpos と strrpos を使用するように実装を変更しましたが、コードはまだ機能しません。strrpos はシンボルを文字として処理できますか? 更新されたコードは次のとおりです。
const CHAR_LIST = '+-*/^rabcdefg';
$index = 5;//arbitrary point between where the symbols are
$start = strrpos(substr($expression,0,index-1),$this::CHAR_LIST);
$end = strpos(substr($expression,index+1),$this::CHAR_LIST);
index はリスト内の文字の 1 つです。これが、strpos と strrpos がそれを超える理由です。