0

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

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

例如:

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

1 回答 1

4

执行此操作的最佳方法(尽管有一个小警告)将是strspn()strcspn()之一,但根据您想要做什么会有细微的差别......

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

php > $pos = strspn('xxxwrrw', 'x');
php > var_dump($pos);
int(3)

如果你需要特别是 'w' 或 'r'的第一次出现,你需要strcspn()

php > $pos = strcspn('xxxwrrw', 'rw');
php > var_dump($pos);
int(3)

但正如我所说,有一个小警告......这些函数返回匹配或不匹配给定掩码/针的初始长度('c'strcspn()代表“计数器”)。
这意味着他们永远不会回来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
于 2012-05-16T10:09:57.627 回答