PHP - 如何在字符串中找到第一次出现任何字符的位置但是预先指定的字符?

时间:2012-05-16 10:04:52

标签: php string find character

我有一串可变长度。每个字符都是'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

1 个答案:

答案 0 :(得分: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)

但正如我所说,有一点需要注意......这些函数返回的初始长度与给定的mask / needle匹配或不匹配({{1}中的'c'代表“反击”) 这意味着他们永远不会返回strcspn()并且您将始终获得积极的结果,例如'XXXXXXX':

false

因此,您可能想要检查返回的位置是否确实存在,如下所示:

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'