2013-02-28 3 views
2

정의 :
PHP string Differences with Dynamic restrictions에서 작업하는 동안이 시나리오를 발견했습니다. 내가 원하는 것을 더 잘 이해할 수있는 참고 일 수도 있습니다.자리 표시 자와 일치하는 부분 문자열

문제 :
가정하자 나는 주요 문자열이 있습니다

"이것은 {2} 자리와 {1} 문자열입니다"

그리고 보조 일 :

질문 "이것은 자리에 대한 데이터로 매우 유사 문자열"
가 어떻게 각각의 자리에 대해 하나 개의 변수를 얻을 수있는, $v1, $v2, $vn, 값이 "매우 유사""에 대한 데이터는 각각" "입니까? 보시다시피, 각 자리 표시 자에 주 부분에없는 부분 문자열을 할당해야합니다.

:
내가 PHP와 함께 일하고 있습니다.

+1

사용 '$ strRegEx ='# 'preg_replace이다 ('#의 \ {\ D + \} # ','(*). '$ mainStr)'# ';..'패턴을 얻을 수있다. – SparKot

답변

2

당신이 뭔가를 할 정규식을 사용할 수 있어야합니다 :

$pattern="/This is a (.*) string with (.*) placeholders/"; 
$subject="This is a very similar string with data for the placeholders"; 

preg_match($pattern,$subject,$matches); 

$v1=$matches[1]; 
$v2=$matches[2]; 

는 PHP에서 정규식에 대한 추가 정보를 원하시면 http://php.net/manual/en/function.preg-match.php를 참조하십시오.

+0

정규식을 사용하는 것이 유일한 방법이라면 ** "main strings"**가 동적이기 때문에 패턴을 동적으로 만들어야합니다. 정규식을 사용하지 않고 다른 옵션이 있다고 생각합니까? –

+0

@MarkTower 당신은'{0}'까지 문자열 부분의 길이를 계산할 수 있고 부분 문자열을 사용할 수는 있지만 정규 표현식이 더 쉬울 것이라고 생각합니다. 정규식의 어떤 부분이 당신을 위해 일하지 않습니까? regex 문자열을 동적으로 빌드 할 수 있어야합니다. '{0}'대신'(. *)'를 넣으십시오. –

+0

감사합니다. 나는 그들이 느린 줄 알았 기 때문에 정규 표현식을 사용하고 싶지 않았지만 여기서는 최상의 해결책 인 것 같습니다. –

0

sprintf을 사용 하시겠습니까?

$string = 'This is a %s string with %s placeholders'; 
$v1 = 'very similar'; 
$v2 = 'data for the'; 

$result = sprintf($string, $v1, $v2); 
+0

답장을 보내 주셔서 감사합니다. 그러나 처음에는'$ v1'과'$ v2'에 어떤 값이 있는지 모르겠습니다 ...이들은 내가 가치를 부여하려고하는 변수입니다 :) –

관련 문제