2011-01-07 11 views
0

これは私のカスタムタグPHP正規表現:スペース&偶然にに改行(カスタムタグ)

[extract=A:B(

    <div> 
     <p>Some content...</p> 
    </div> 

)] 
  • 単語エキス滞在はそのままです。
  • 値Aには文字列が入力されます(空白は1つ、改行なし)
  • 値Bには()内にhtml closedが含まれます。それはラインが



を壊す含まれています私は、正規表現との良好なないですが、これは私が欲しいものは基本的です。

\/[extract=(.*?):(.*?)/]\ 


私は を返すために、適切なパターンのクエリとforeachループ、preg_match_all()を必要とする & B

+0

_缶 "一部のコンテンツ..." _含ん)および/または]?ウィルBは常にという形でHTMLタグを含んでいます_他のタグを含む可能性のあるコンテンツ_ ...の外側にあるものを気にしますか? – RobertB

+1

最初に効果的にテンプレート言語となる言語でカスタムマークアップタグのセットを作成します。興味深い... –

+0

@RobertB:はい、私はcontan []内のBの – Zebra

答えて

2

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

preg_match_all('/\[extract=(?<class>\w+):(?<method>\w+)\((?<html>.*?)\)\]/s', $content, $matches); 
print_r($matches['class']); 
print_r($matches['method']); 
print_r($matches['html']); 

万一出力:

Array 
(
    [0] => A 
) 
Array 
(
    [0] => B 
) 
Array 
(
    [0] => 

    <div> 
     <p>Some content...</p> 
    </div> 

) 
+1

+1という名前のバックリファレンスです。 – stevelove

+0

正確に私が必要とするもの。ありがとう! – Zebra

1

私は完全にあなたの質問を理解していません。 "A"の文字列はどこに入力する必要がありますか?手紙 "A"の代わりに?そうインクルードする

preg_match_all('/\[extract=([^\s]+?):(.+)\]/s', 'your custom tag', $result);

だから何あなたが探しているかもしれないが、ドットを変更する修飾子sある文字の意味:

これはあなたが望むものである場合には、解決策があります(「」)改行。

正規表現の使い方を知りたい場合は、http://www.regular-expressions.info/もお勧めします。

+0

はい、Aはクラスインスタンス、BはパラメータとしてHTMLコードを含むメソッドです – Zebra

+0

私は書いた式を使うことができますので、 。 –

+0

コードとリンクをありがとう! – Zebra

1

これは完璧ではないかもしれませんが、非常に迅速かつ限定的なテストではうまくいくようです。それ以外の場合は、より良い解決策を得るのに役立ちます。

/^(?:\[extract=)(\w)+:(\w+\(.*\))\]$/s

末尾sフラグは、ドットの試合に新しい行を含むすべての文字を作るために使用されることに注意してください。