如何在php中使用通配符搜索获得位置(strpos)

时间:2016-04-21 13:40:46

标签: php strpos

考虑我有一个像这样的字符串

"i dont know what i am doing abcd SDDDFDFDF fff ggg eee some texts......."

这就是我想要的外卡abcd %SOMEWILDCARD% fff ggg eee

即我需要在a中获得abcd的位置,即位置28

在google搜索很多我发现这个fnmatch用于匹配或在php中进行通配符搜索,但在没有链接的情况下我可以找到我想要的...

这是我试过的,我知道这听起来很愚蠢

echo strpos ($strmatch,  fnmatch('abcd /*/ fff ggg eee', $strmatch));

如预期的那样什么也没有回来。

2 个答案:

答案 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是一个嵌套数组,其中第一个元素是整个匹配的数组,其中第一个子元素是匹配的字符串,第二个元素是该匹配的起始位置找到了字符串。