2014-11-05 3 views
0

문자열의 일부가 중괄호 안에있는 문자열이 있는데 배열로 가져 오려고합니다.이중 중괄호 안에있는 문자열 가져 오기

캐릭터 라인은, 예를 들면 : Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit.

그리고 나는 좀하고 싶습니다 :

array("ipsum", "consectetur") 내가이 시도 :

$regExp = "/\{\{([^)]+)\}\}/"; 
$result = preg_grep($regExp, array("Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit.")); 

을하지만 난 다시 결과로 주어진 문자열을 얻을

+3

사용이 정규식 '\ {\ {\ K [^ {}] * (? =}})''preg_match_all' 함수이다. http://regex101.com/r/hQ9dW1/1 –

답변

2

잘못된 기능을 사용하고 있으니 preg_match_all()을 사용해야합니다.

greedy matching 대신 lazy를 사용하여 결과가 ipsum}} dolor sit amet, {{consectetur이되지 않도록해야합니다. 당신은 당신의 정량 후 ?를 추가하여 해당 작업을 수행 할 수 있습니다

$regExp = "/\{\{([^)]+?)\}\}/"; 
        ^here 
preg_match_all($regExp, "Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit.", 
       $result); 

var_dump($result); 

working example을.

+0

내 솔루션과 아주 흡사합니다. 단지 질문 : 왜 [^]] 부분이 필요합니까? 왜 닫는 괄호를 제외 시키려고합니까? –

+0

@TiborB. 실제로, 당신은 그것을 필요로하지 않습니다. 이 경우'. +? '는'[^)] +?'와 같이 수행됩니다. 그러나 나는 OP가 그것을 이유로 사용한다고 가정하기 때문에 여기에 보이지 않는 다른 것들을 깨뜨리지 않기 위해 표현을 복사했습니다. – jeroen

+0

아, 알겠습니다. 나는 뭔가를 놓쳤다 고 생각했다. –

1

사용 preg_match_all() 대신 preg_grep

$str = 'Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit'; 
preg_match_all('!\{(\w+)\}!', $str, $m); 
$result = array_map(function($v){return trim($v, '{}');},$m[0]); 

print '<pre>'; 
print_r($result); 
print '</pre>';