考虑我有一个像这样的字符串
"i dont know what i am doing abcd SDDDFDFDF fff ggg eee some texts......."
这就是我想要的外卡abcd %SOMEWILDCARD% fff ggg eee
即我需要在a
中获得abcd
的位置,即位置28
。
这是我试过的,我知道这听起来很愚蠢
echo strpos ($strmatch, fnmatch('abcd /*/ fff ggg eee', $strmatch));
如预期的那样什么也没有回来。
答案 0 :(得分:1)
也许是这样的:
$string = "i dont know what i am doing abcd SDDDFDFDF fff ggg eee some texts.......";
$sub_string = "abcd";
$sub_sub_string = "a";
$first_pos = strpos($string, $sub_string);
$last_pos = $first_pos + strpos($sub_string, $sub_sub_string);
echo $last_pos;
答案 1 :(得分:1)
preg_match
支持PREG_OFFSET_CAPTURE
标记,该标记将为您提供找到的字符串的位置。 preg_match documentation个州
<强> PREG_OFFSET_CAPTURE 强>
如果传递此标志,则对于每个发生的匹配,还将返回附加字符串偏移量。请注意,这会将匹配的值更改为一个数组,其中每个元素都是一个数组,该数组由偏移量为0的匹配字符串和偏移量为1的主体的字符串偏移量组成。
简短的例子:
$str = "i dont know what i am doing abcd SDDDFDFDF fff ggg eee some texts.......";
preg_match("~abcd\s+.*?\s+fff~", $str, $matches, PREG_OFFSET_CAPTURE);
$position = $matches[0][1];
为了解释正则表达式,我使用波浪号(〜)作为标记RegExp开头和结尾的分隔符。而Regexp的意思是,匹配 abcd ,后跟一个无限空白字符(空格,制表符等),后跟任何内容,将非贪婪与下一个匹配到无限空白字符,然后是<强> FFF 强>
现在$matches
是一个嵌套数组,其中第一个元素是整个匹配的数组,其中第一个子元素是匹配的字符串,第二个元素是该匹配的起始位置找到了字符串。