2009-11-11 11 views
1

PHP에서 매우 구체적인 함수가 필요합니다. 기본적으로 두 개의 문자열을 인수로 사용하며 그 중 하나는 가변 길이 (*)의 와일드 카드를 포함하는 패턴이고 그 중 하나는 해당 패턴과 일치하는 문자열입니다. 패턴에서 와일드 카드를 채우는 후자의 문자열에서 배열을 가져와야합니다.PHP에서 와일드 카드와 일치하는 문자열 가져 오기

예를 들어

:

  • 인수 1 :
  • 인수 2 "이것은 내가 * 문자열 *입니다": 배열 (":
  • 반환을"이것은 나 자신에게 만들어 내 멋진 문자열입니다 " 내 멋진 ","나 자신을 만든 ")

가장 깨끗한 방법은 무엇입니까? 이 예에서는 영어 단어가 항상 임의의 임의의 문자 일 수 있음을 명심하십시오.

답변

1

와일드 카드를 정규식으로 대체하고 preg_match를 통해 실행할 수 있습니다. 정말 숙제 같은 소리 않기 때문에

, 나는 중 특정 코드를 제공하지 않습니다,하지만 난 일치하는 하위 문자열의 배열을 구축하는 (그리고 preg_match (정규식 상응하는 와일드 카드를 대체 할) preg_replace을 잘 활용할 것).

+0

이것은 가장 좋은 방법이라고 생각했지만, 패턴이 이러한 와일드 카드가있는 알려지지 않은 문자열 인 경우 해당 문자열을 이스케이프 처리하여 정규식이 각 문자를 문자 그대로 취급하고 문자 그대로 취급하지 않도록하는 좋은 방법이 있습니까? 무늬? 예를 들어, 내가 "." 또는 그 패턴 문자열에서 "[", 그들은 문자 그대로 머물러야 할 것입니다. – Travis

+0

신경 쓰지 마라. preg_quote()는 내가 찾고있는 것이다. 당신의 도움을 주셔서 감사합니다. – Travis

2

숙제와 같은 소리가납니다. 다음은 실제 코드가없는 워크 스루입니다.

문자열과 와일드 카드로 패턴을 토큰 화합니다. 토큰을 반복합니다. 대상 문자열이 일반 (문자열, 비 와일드 카드) 토큰으로 시작될 때마다 해당 문자열을 잘라냅니다. 와일드 카드 토큰을 발견 할 때마다 문자열에서 다음 토큰의 색인을 찾아 해당 색인까지 잘라냅니다. 그걸 보관 해. 일치하는 항목이 없으면 false를 반환합니다. 패턴이 완료되기 전에 문자열의 끝을 발견하면 false를 반환합니다. 마지막 토큰이 와일드 카드이면 나머지 문자열을 저장하십시오.

+0

작동해야합니다. 나는 그것을 줄 것이다. 숙제가 아니라 단지 게으름 일 것입니다. – Travis