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

how to get the position (strpos) using wild card search in php

考虑一下我有这样一个字符串

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

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

即这里我需要得到 aabcd 中的位置,即位置 28.

通过谷歌搜索,我发现这个 fnmatch 用于在 php 中匹配或进行通配符搜索,但在 link 中我找不到我要找的东西...

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

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

正如预期的那样,它没有返回任何内容。

也许是这样的:

$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;

preg_match 支持 PREG_OFFSET_CAPTURE 标志,它将为您提供找到的字符串的位置。 preg_match documentation 个州

PREG_OFFSET_CAPTURE

If this flag is passed, for every occurring match the appendant string offset will also be returned. Note that this changes the value of matches into an array where every element is an array consisting of the matched string at offset 0 and its string offset into subject at offset 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 的意思是,匹配 abcd 后跟一个到无限的空白 space 字符(space、制表符等),然后是任何东西,匹配非贪婪最多下一个到无限空白 space 个字符,然后是 fff.

现在$matches是一个嵌套数组,第一个元素是整个匹配的数组,第一个子元素是被匹配的字符串,第二个元素是起始位置那个找到的字符串。