nasıl

2011-05-05 20 views
8

Ben, buna benzer bir dize var preg_match() ile en kısa ziyade mümkün olan en uzun regex maçı almak için:nasıl

Ben sadece "something1" preg_match() işlevini kullanarak eşleşebilir nasıl
{{something1}} something2 {{something3}} something4 

?

Denedim:

preg_match("/\{\{(.*)\}\}/si",$content,$matches); 

ama bu kalıba \b ekleyerek çalıştı

something1}} something2 {{something3 

dönen çok fazla eşleşti, ama ben de bu şekilde istediğini elde etmedi.

Bu konuda bana yardımcı olabilir misiniz?

+0

o Bir çeşit uygunsuz json gibi görünüyor, size ulaşmadan önce ip üzerinde kontrol sahibi misiniz? – mcgrailm

+2

İlk Soru. Düzgünce sordu. Upvoted. –

cevap

19

Kullanım dışı açgözlü değiştirici ?:

preg_match("/\{\{(.*?)\}\}/si",$content,$matches); 
      here --^ 
+1

Teşekkürler! "burada - ^", megacool'dur) – Narek

0

bu deneyin:

preg_match('|{{([^}]+)}}|si', $content, $matches); 

echo $matches[1]; 
+1

OP'nin kapanış "etiketi" bir çift '}' olduğu için, tek bir '}' çok iyi bir şekilde izin verilebilir. İsteksiz ". *?", M42'nin önerdiği gibi IMO'dur. –

+0

Teşekkürler, ama çalışmıyor :) – Narek

+0

Her iki yöntem de eşit olarak çalışır. '[^' Özelliğini mümkün olduğunca spesifik kullanmayı tercih ederim. Ben inanıyorum. Yukarıdaki regex'ten daha fazla adım atıyor (emin değilim, daha sonra test edeceğiz), bununla birlikte ihmal edilebilir performans farkı sadece sözdizimine indiriyor. –

1

tam cevap - bizim $ var ise: Biz

STARTT 
FIRST KKK 
SECOND KKK 

1) de harf kullanın :

$var = preg_replace('/STARTT(.*)KKK/', 'REPLACED-STRING', $var); 

geçen KKK için STARTT her şeyi değiştirecek ve Sonucu olacaktır:

kullandığımız durumda
REPLACED-STRING 

2):

$var = preg_replace('/STARTT(.*?)KKK/', 'REPLACED-STRING', $var); 

Sonucu olacaktır:

REPLACED-STRING 
SECOND KKK