2016-04-21 2 views
0

Учитывать У меня есть строка, как этоткак получить позицию (StrPos), используя дикий поиск карты в PHP

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

Это то, что я хочу, как джокер abcd %SOMEWILDCARD% fff ggg eee

т.е. здесь я должен получить положение a в abcd т.е. позиция 28.

на много прибегая к помощи я узнал этот fnmatch используется, чтобы соответствовать или сделать поиск подстановочных в PHP, но без ссылки я мог бы найти то, что я ищу ...

Вот что я пытался, я знаете этот звук глупый

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

как и ожидалось, он ничего не возвращал.

+0

Это звучит как работа для регулярного выражения, но мне не удобно с регулярным выражением, поэтому, возможно, кто-то увидит ваш вопрос и сможет вам помочь. – MonkeyZeus

+1

Я смущен, какова связь между вашим шаблоном и 'abcd'? Чего вы на самом деле пытаетесь достичь? Всегда ли 'abcd' будет одинаковым? Почему вы не можете просто искать abcd, используя 'strpos'? –

ответ

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 является вложенным массивом, где первый элемент представляет собой массив полного соответствия, где первый подэлемент - это строка, которая была сопоставлена, а второй элемент является исходной позицией найденной строки.

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;