2009-11-11 2 views
1

Мне нужна очень специфическая функция в PHP. В принципе, у меня есть две строки в качестве аргументов, одна из которых представляет собой шаблон, который содержит подстановочные знаки переменной длины (*), а одна из них - строка, соответствующая этому шаблону. Мне нужно получить массив строк из последней строки, которые заполняют подстановочные знаки в шаблоне.Получить строку, которая соответствует шаблону в PHP

Например:

  • Аргумент 1: "Это * строка, I *"
  • Аргумент 2: "Это моя огромная строка, которую я создал себе"
  • Возврат: массив (» мой удивительный "," создал себя ")

Какой самый чистый способ сделать это? Имейте в виду, что это не всегда строки английских слов, как в примере, они могут быть любыми случайными символами.

ответ

1

Вы можете просто заменить подстановочные знаки эквивалентом регулярных выражений и запустить его через preg_match.

Потому что это действительно звучит как домашнее задание, я не буду давать какой-либо конкретный код либо, но я хорошо использовать preg_replace (чтобы заменить символы с регулярными выражениями эквивалентов) и preg_match (построить массив совпадающих подстрок).

+0

Мне показалось, что это лучший способ сделать это, но если мой шаблон является неизвестной строкой с этими подстановочными знаками в нем, есть ли хороший способ избежать этой строки, так что регулярное выражение обрабатывает каждый символ как литерал, а не как часть шаблон? Например, если у меня есть "." или "[" в этой строке шаблона, они должны будут оставаться буквальными символами. – Travis

+0

Ничего, preg_quote() - именно то, что я искал. Спасибо за вашу помощь. – Travis

2

Звучит как домашнее задание. Вот прохождение без какого-либо действительного кода:

Tokenize pattern в строки и подстановочные знаки. Итерации над токенами; каждый раз, когда целевая строка начинается с обычного (строкового, несимметричного) токена, обрезает эту строку. Каждый раз, когда вы сталкиваетесь с токеном wild card, найдите индекс следующего токена в строке и обрезайте до этого индекса. Сохраните это. Если в любое время нет совпадения, верните false. Если вы столкнулись с окончанием строки до завершения шаблона, верните значение false. Если последний токен является подстановочным знаком, сохраните оставшуюся часть строки.

+0

Должно работать. Я отдам его. Это не домашнее задание - возможно, просто лень. – Travis

Смежные вопросы