1

我想知道如何查看我从字符串中提取的单个字符是否与字符列表中的任何一个匹配,我知道我可以通过迭代来做到这一点,但我不希望这样做。我也需要能够找到

我目前正在尝试这样做,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 是列表中的字符之一,这就是 strpos 和 strrpos 遍历它的原因。

4

3 回答 3

4

我认为你需要一个匹配的正则表达式字符类:

while(!(preg_match("/[".$this::CHAR_LIST."]/", $expression[$start]) === 1))
{
    $start--;
}

方括号“[]”代表一个字符类。

于 2013-06-26T17:00:49.157 回答
1

正则表达式不是这里的方法。使用 strrpos。strrpos 比使用正则表达式的模式匹配工作得更快。

于 2013-06-26T17:04:56.410 回答
1

您在寻找strpos吗?

strrpos — Find the position of the last occurrence of a substring in a string
于 2013-06-26T16:59:54.370 回答