2009-08-17 10 views
1

みんな、これはおそらくかなりシンプルですが、どのようにして、この出現の正規表現をテキストの読み込みに使ってすべての一致を見つけることができますか?もう一つのPHPの正規表現の質問

[[data in here]] 

EG:

Blah blah blah [[find]] and maybe [[this]] 

だから私は出現を検索し、URLとしてそれらを交換することができています。

それは意味がありますか?

私は

preg_match_all("/[[([^<]*)]]/", $data, $matches, PREG_OFFSET_CAPTURE); 

を使用してみましたが、エラーが返されます。何か案は? :)

+1

'['と ']'は正規表現では特殊文字なので、 '\\'でエスケープする必要があります。 – cdmckay

答えて

5

はこれを試してみてください:

preg_match_all("/\[\[(.+?)\]\]/", $data, $matches, PREG_OFFSET_CAPTURE); 
+0

素晴らしいです、ありがとうございます。 – James

+0

使用する利点はありますか?+? over *。それとも単に好みですか?私は彼らが違う状況を考えることができません。 – camomileCase

+0

。* =は、任意の文字に0回以上、できるだけ多く一致します。 –

0

たぶん....

"/\[.*\]/" 

?ちょうど野生の推測。

私は基本的な問題は特殊な文字であるため、大カッコをエスケープする必要があると思います。

0

をあなたは '[' と ']' 文字をエスケープする必要があります - 彼らは正規表現で特殊文字です。あなたはおそらく、あなたが喜ばしかし、あなたが再書き込みURLにmakeURL()機能を微調整することができますpreg_replace_callback()

function makeURL($matches) { 
    $url = $matches[1]; 
    return "<a href=\"http://$url\">$url</a>"; 
} 

$data = 'My website is [[www.example.com]].'; 

echo preg_replace_callback('/\[\[(.*?)\]\]/', 'makeURL', $data); 

// output: My website is <a href="http://www.example.com">www.example.com</a> 

でこれをやってオフに最高です。

0

[および]は、正規表現構文で意味を持ちます。それらを一致させるには、\文字を使用して「エスケープ」する必要があります。だからあなたの正規表現は次のようになります。

"/\[\[(.+?)\]\]/" 

[]文字の使用方法とどのようにそれらを逃れるためには、かなり基本的な正規表現の知識です。失礼なことではありませんが、プロダクションコードを書く前に正規表現を学ぶのにもう少し時間を費やすことをお勧めします。