PHP-如何查找字符串中除预先指定的字符外的任何字符的第一次出现的位置?

PHP-如何查找字符串中除预先指定的字符外的任何字符的第一次出现的位置?,php,string,find,character,Php,String,Find,Character,我有一个长度可变的字符串。每个字符都是“r”、“w”或“x” 我知道如何使用strpos()查找字符串中第一个字符出现的位置。但是我想找出第一个出现的“r”或“w”的位置。换句话说,我想找到第一次出现“不是x”的位置 例如: "rwxrxx" would return 0 "wxrr" would return 0 "xxwwwwwr" would return 2 "xxrx" would return 2 "xxxwrrwxxrrwxrrwwxrxrw" would return 3 实现

我有一个长度可变的字符串。每个字符都是“r”、“w”或“x”

我知道如何使用strpos()查找字符串中第一个字符出现的位置。但是我想找出第一个出现的“r”或“w”的位置。换句话说,我想找到第一次出现“不是x”的位置

例如:

"rwxrxx" would return 0
"wxrr" would return 0
"xxwwwwwr" would return 2
"xxrx" would return 2
"xxxwrrwxxrrwxrrwwxrxrw" would return 3

实现这一点的最佳方法(尽管有一个小的警告)是或中的一个,但根据您想要做的事情,有一个细微的区别

如果要查找除“x”以外的字符的第一次出现,则需要
strspn()

如果需要第一次出现特别是“w”或“r”,则需要
strcspn()

但正如我所说,有一个小警告。。。这些函数返回与给定掩码/指针匹配或不匹配的初始长度(
strcspn()
中的“c”代表“计数器”)。
这意味着它们永远不会返回
false
,并且您总是会得到一个阳性结果,例如“xxxxxxx”:

php > $pos = strcspn('xxxxxx', 'rw');
php > var_dump($pos);
int(6)
因此,您可能需要检查返回的位置是否确实存在,如下所示:

php > $input = 'xxxxxx';
php > $pos   = strspn($input, 'x'); // i.e. $pos = 6;
php > var_dump(isset($input[$pos]));
bool(false) // There was no character other than 'x'

原始答复:


实现这一点的最佳方法(尽管有一个小的警告)是或中的一个,但根据您想要做的事情,有一个细微的区别

如果要查找除“x”以外的字符的第一次出现,则需要
strspn()

如果需要第一次出现特别是“w”或“r”,则需要
strcspn()

但正如我所说,有一个小警告。。。这些函数返回与给定掩码/指针匹配或不匹配的初始长度(
strcspn()
中的“c”代表“计数器”)。
这意味着它们永远不会返回
false
,并且您总是会得到一个阳性结果,例如“xxxxxxx”:

php > $pos = strcspn('xxxxxx', 'rw');
php > var_dump($pos);
int(6)
因此,您可能需要检查返回的位置是否确实存在,如下所示:

php > $input = 'xxxxxx';
php > $pos   = strspn($input, 'x'); // i.e. $pos = 6;
php > var_dump(isset($input[$pos]));
bool(false) // There was no character other than 'x'

原始答复:

php >     $string = 'xrwxrxx';
php >     preg_match('/[^x]/', $string, $matches, PREG_OFFSET_CAPTURE);
php >     echo $matches[0][1];
1