我想知道如何查看我从字符串中拉出的单个字符是否匹配任何字符列表,我知道我可以通过迭代执行此操作,但我不想这样做。我还需要能够找到
我目前正在尝试使用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覆盖它的原因。
答案 0 :(得分:4)
我认为你需要一个匹配的正则表达式字符类:
while(!(preg_match("/[".$this::CHAR_LIST."]/", $expression[$start]) === 1))
{
$start--;
}
方括号“[]”代表一个字符类。
答案 1 :(得分:1)
您在寻找strpos吗?
strrpos — Find the position of the last occurrence of a substring in a string
答案 2 :(得分:1)
正则表达式不是这里的方法。使用strrpos。 strrpos比使用正则表达式进行模式匹配更快。